Compare commits

...

193 Commits

Author SHA1 Message Date
60ef5724cd Merge pull request 'sergeev_evgenii_lab_2 is done!' (#128) from sergeev_evgenii_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/128
2024-01-18 16:04:59 +04:00
6827a64c4d Merge pull request 'kutygin_andrey_lab_3_ready' (#120) from kutygin_andrey_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/120
2024-01-18 16:03:23 +04:00
7de577eadc Merge pull request 'podkorytova_yulia_lab_4 is ready' (#134) from podkorytova_yulia_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/134
2024-01-17 17:07:53 +04:00
2690438508 Merge pull request 'romanova_adelina_lab_4_ready' (#129) from romanova_adelina_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/129
2024-01-17 13:12:17 +04:00
e3677ed302 Merge pull request 'kutygin_andrey_lab_2_ready' (#121) from kutygin_andrey_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/121
2024-01-17 11:50:07 +04:00
yulia
f5bc94c4ec podkorytova_yulia_lab_4 is ready 2024-01-17 04:12:23 +04:00
f4ec46b14d romanova_adelina_lab_4_ready 2024-01-16 17:30:43 +04:00
ac085099f4 Merge pull request 'kutygin_lab_1_ready' (#122) from kutygin_andrey_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/122
2024-01-16 17:29:29 +04:00
sergeevevgen
46f2a8da94 + 2024-01-16 17:12:52 +04:00
Евгений Сергеев
84bd5277a9 done! 2024-01-16 16:57:20 +04:00
Евгений Сергеев
bb78e6823b done! 2024-01-16 16:05:42 +04:00
sergeevevgen
ea990fd848 + 2024-01-16 14:52:17 +04:00
a284e473a9 kutygin_andrey_lab_3_ready 2024-01-16 12:10:49 +04:00
c7ccb94de9 kutygin_andrey_lab_2_ready 2024-01-16 12:09:03 +04:00
0a6ce933c7 kutygin_lab_1_ready 2024-01-16 11:35:19 +04:00
d867909883 Merge pull request 'sergeev_evgenii_lab_1 is done!' (#119) from sergeev_evgenii_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/119
2024-01-16 09:15:07 +04:00
sergeevevgen
b9d3eb249b лабораторная номер 1 готова! 2024-01-14 01:35:29 +04:00
sergeevevgen
934dd837ac + 2024-01-13 20:31:25 +04:00
Евгений Сергеев
36c429cb4f init 2024-01-13 19:17:58 +04:00
Евгений Сергеев
61c94a9155 init 2024-01-13 19:15:55 +04:00
8496ba5b3e Merge pull request 'podkorytova_yulia_lab_8 is ready' (#110) from podkorytova_yulia_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/110
2024-01-13 09:40:47 +04:00
4e177372a9 Merge pull request 'podkorytova_yulia_lab_6 is ready' (#108) from podkorytova_yulia_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/108
2024-01-13 09:40:42 +04:00
a311037d8d Merge pull request 'podkorytova_yulia_lab_7 is ready' (#109) from podkorytova_yulia_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/109
2024-01-13 09:40:39 +04:00
6fea07c73d Merge pull request 'belyaeva lab8 ready' (#118) from belyaeva_ekaterina_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/118
2024-01-13 09:39:50 +04:00
3f6234209a Merge pull request 'belyaeva lab7 ready' (#117) from belyaeva_ekaterina_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/117
2024-01-13 09:39:41 +04:00
b3c9d6a471 Merge pull request 'belyaeva lab6 ready' (#116) from belyaeva_ekaterina_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/116
2024-01-13 09:39:33 +04:00
080efc8a4c Merge pull request 'belyaeva_ekaterina_lab_5' (#115) from belyaeva_ekaterina_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/115
2024-01-13 09:39:24 +04:00
6e86bdcc1e Merge pull request 'belyaeva lab4 ready' (#114) from belyaeva_ekaterina_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/114
2024-01-13 09:39:15 +04:00
51c5bfa80a Merge pull request 'belyaeva lab3 ready' (#113) from belyaeva_ekaterina_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/113
2024-01-13 09:39:08 +04:00
a901a2b306 Merge pull request 'belyaeva lab2 ready' (#112) from belyaeva_ekaterina_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/112
2024-01-13 09:39:00 +04:00
ffdf6c9ab9 Merge pull request 'lab1 belyaeva ready' (#111) from belyaeva_ekaterina_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/111
2024-01-13 09:38:51 +04:00
a44eb5cb56 belyaeva lab8 ready 2024-01-11 20:29:50 +04:00
2270fa67e4 belyaeva lab7 ready 2024-01-11 20:27:39 +04:00
8ed344819f belyaeva lab6 ready 2024-01-11 20:25:40 +04:00
426dcca1ec belyaeva lab5 ready 2024-01-11 20:23:47 +04:00
e7ba5e4e23 belyaeva lab5 ready 2024-01-11 20:21:38 +04:00
5bca0d2e6f belyaeva lab4 ready 2024-01-11 20:16:53 +04:00
992635f9e5 belyaeva lab3 ready 2024-01-11 20:12:15 +04:00
ec6f254f98 belyaeva lab2 ready 2024-01-11 20:08:33 +04:00
e1be77f193 lab1 ready 2024-01-11 20:02:42 +04:00
yulia
a8df36581d podkorytova_yulia_lab_8 is ready 2024-01-11 05:00:33 +04:00
yulia
e3972e8932 podkorytova_yulia_lab_7 is ready 2024-01-11 03:24:59 +04:00
yulia
e617f9ebbb podkorytova_yulia_lab_6 is ready 2024-01-10 16:37:46 +04:00
5e2305d3ac Merge pull request 'mashkova_margarita_lab_8' (#104) from mashkova_margarita_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/104
2024-01-10 11:17:11 +04:00
89b987e416 Merge pull request 'mashkova_margarita_lab_7 ready' (#101) from mashkova_margarita_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/101
2024-01-10 11:16:40 +04:00
2de04f60a9 Merge pull request 'mashkova_margarita_lab_6 ready' (#106) from mashkova_margarita_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/106
2024-01-10 11:09:53 +04:00
a2cd0cf527 Merge pull request 'mashkova_margarita_lab_5 ready' (#105) from mashkova_margarita_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/105
2024-01-10 11:08:46 +04:00
219ce2acfe Merge pull request 'mashkova_margarita_lab_4 ready' (#107) from mashkova_margarita_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/107
2024-01-10 11:08:15 +04:00
cf88b559cc Merge pull request 'podkorytova_yulia_lab_5 is ready' (#100) from podkorytova_yulia_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/100
2024-01-10 11:05:31 +04:00
8f7c563a25 Merge pull request 'podkorytova_yulia_lab_3 is ready' (#99) from podkorytova_yulia_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/99
2024-01-10 11:01:51 +04:00
259bcd07f0 mashkova_margarita_lab_4 ready 2024-01-10 08:39:13 +04:00
e68c51b313 mashkova_margarita_lab_6 ready 2024-01-10 06:03:14 +04:00
12523aabaf mashkova_margarita_lab_5 some fix 2024-01-10 05:43:46 +04:00
b0d3c4cc7a mashkova_margarita_lab_5 fix readme 2024-01-10 05:28:38 +04:00
7205c6f8f0 mashkova_margarita_lab_5 ready 2024-01-10 05:21:50 +04:00
82cab3fc1b mashkova_margarita_lab_8 ready 2024-01-10 04:32:02 +04:00
a0e60b3699 mashkova_margarita_lab_8 ready 2024-01-10 04:24:31 +04:00
993786b8ae mashkova_margarita_lab_7 ready 2024-01-10 04:12:45 +04:00
yulia
66525b2d4b podkorytova_yulia_lab_5 is ready 2024-01-10 03:52:28 +04:00
yulia
7328dcb134 podkorytova_yulia_lab_3 is ready 2024-01-10 00:13:23 +04:00
08e44c25c3 Merge pull request 'almukhammetov_bulat_lab_8' (#95) from almukhammetov_bulat_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/95
2024-01-09 11:33:51 +04:00
2c61f815fa Merge pull request 'almukhammetov_bulat_lab_7' (#94) from almukhammetov_bulat_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/94
2024-01-09 11:33:41 +04:00
2bdf735b95 Merge pull request 'almulkammetov_bulat_lab_6' (#97) from almukhammetov_bulat_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/97
2024-01-09 11:33:25 +04:00
2ef1f65ed6 Merge pull request 'almukhammetov_bulat_lab_5' (#96) from almukhammetov_bulat_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/96
2024-01-09 11:33:12 +04:00
7dcce0138f Merge pull request 'almukhammetov_bulat_lab_4' (#93) from almukhammetov_bulat_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/93
2024-01-09 11:32:43 +04:00
427173d554 Merge pull request 'almukhammetov_bulat_lab_3' (#92) from almukhammetov_bulat_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/92
2024-01-09 11:32:27 +04:00
5104f74803 Merge pull request 'almukhammetov_bulat_lab_2' (#91) from almukhammetov_bulat_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/91
2024-01-09 11:32:12 +04:00
5341271f9e Merge pull request 'degtyarev_mikhail_lab_2 is ready' (#98) from degtyarev_mikhail_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/98
2024-01-09 11:31:43 +04:00
e582711076 degtyarev_mikhail_lab_2 is ready 2024-01-08 23:30:25 +04:00
BulatReznik
0a5d8d6e02 almulkammetob_lab_6 2024-01-07 13:36:54 +04:00
BulatReznik
4498245823 almukhammetov_bulat_lab_5 2024-01-07 11:16:43 +04:00
BulatReznik
b06fb8f5c5 almukhammetov_bulat_lab_8 2024-01-06 19:20:17 +04:00
BulatReznik
1ffed2075a + 2024-01-06 18:57:32 +04:00
BulatReznik
f7b9e00012 almukhammetov_bulat_lab_4 2024-01-06 18:37:17 +04:00
BulatReznik
6afc3b032f + 2024-01-06 16:59:55 +04:00
BulatReznik
a07d49560a + 2024-01-06 16:52:19 +04:00
BulatReznik
1cd0264117 almukhammetov_bulat_lab_2 2024-01-02 13:36:35 +04:00
a346187851 Merge pull request 'antonov_dmitry_lab_8_ready' (#38) from antonov_dmitry_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/38
2023-12-28 11:20:49 +04:00
97f2f1e018 Merge pull request 'tepechin_kirill_lab_8' (#52) from tepechin_kirill_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/52
2023-12-28 11:20:36 +04:00
314d96b716 Merge pull request 'basharin_sevastyan_lab_8 is ready' (#58) from basharin_sevastyan_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/58
2023-12-28 11:20:25 +04:00
d45d516d4a Merge pull request 'gusev_vladislav_lab_8 is ready' (#66) from gusev_vladislav_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/66
2023-12-28 11:20:06 +04:00
7c877e803d Merge pull request 'martysheva_tamara_lab_8 is ready' (#70) from martysheva_tamara_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/70
2023-12-28 11:19:57 +04:00
e07dde810d Merge pull request 'alexandrov_dmitrii_lab_8 is ready' (#74) from alexandrov_dmitrii_lab_8 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/74
2023-12-28 11:19:46 +04:00
46ae5b2736 Merge pull request 'tepechin_kirill_lab_7' (#51) from tepechin_kirill_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/51
2023-12-28 11:16:45 +04:00
55d384cf1b Merge pull request 'senkin_alexander_lab_7 is ready' (#56) from senkin_alexander_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/56
2023-12-28 11:16:34 +04:00
3cc0bb20fc Merge pull request 'basharin_sevastyan_lab_7' (#57) from basharin_sevastyan_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/57
2023-12-28 11:12:13 +04:00
d36865cc2b Merge pull request 'antonov_dmitry_lab_7_ready' (#62) from antonov_dmitry_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/62
2023-12-28 11:11:48 +04:00
34ecd9c33e Merge pull request 'gusev_vladislav_lab_7 is ready' (#65) from gusev_vladislav_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/65
2023-12-28 11:11:36 +04:00
9e7b0fcc03 Merge pull request 'martysheva_tamara_lab_7 is ready' (#69) from martysheva_tamara_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/69
2023-12-28 11:10:13 +04:00
a3d495ad1a Merge pull request 'alexandrov_dmitrii_lab_7 is ready' (#83) from alexandrov_dmitrii_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/83
2023-12-28 11:09:17 +04:00
0c34abeb21 Merge pull request 'martysheva_tamara_lab_5 is ready' (#67) from martysheva_tamara_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/67
2023-12-28 11:08:38 +04:00
86d0303d8d Merge pull request 'tepechin_kirill_lab_6' (#49) from tepechin_kirill_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/49
2023-12-28 11:08:22 +04:00
a5f9016bb5 Merge pull request 'gusev_vladislav_lab_6 is ready' (#64) from gusev_vladislav_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/64
2023-12-28 11:07:34 +04:00
38717b004c Merge pull request 'martysheva_tamara_lab_6 is ready' (#68) from martysheva_tamara_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/68
2023-12-28 11:07:04 +04:00
d613c85a20 Merge pull request 'alexandrov_dmitrii_lab_6 is ready' (#72) from alexandrov_dmitrii_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/72
2023-12-28 11:06:51 +04:00
db6e3e1ba6 Merge pull request 'shadaev_anton_lab_6' (#82) from shadaev_anton_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/82
2023-12-28 11:05:29 +04:00
4c7875241f Merge pull request 'alexandrov_dmitrii_lab_5 lab 5 is ready' (#71) from alexandrov_dmitrii_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/71
2023-12-28 11:00:22 +04:00
6cf3fb6eda Merge pull request 'tepechin_kirill_lab_5' (#48) from tepechin_kirill_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/48
2023-12-28 10:58:06 +04:00
073265a64b Merge pull request 'martysheva_tamara_lab_4 is ready' (#63) from martysheva_tamara_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/63
2023-12-28 10:57:30 +04:00
176dd95462 Merge pull request 'gusev_vladislav_lab_4' (#46) from gusev_vladislav_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/46
2023-12-28 10:57:06 +04:00
5f1bb5e2bd Merge pull request 'tepechin_kirill_lab_4' (#45) from tepechin_kirill_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/45
2023-12-28 10:55:19 +04:00
5a1e7cb698 Merge pull request 'martysheva_tamara_lab_2 is ready' (#50) from martysheva_tamara_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/50
2023-12-28 10:55:03 +04:00
0a2777cf55 Merge pull request 'alexandrov_dmitrii_lab_4 is ready' (#77) from alexandrov_dmitrii_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/77
2023-12-28 10:46:50 +04:00
aeee4e3f7e Merge pull request 'shadaev_anton_lab_4' (#84) from shadaev_anton_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/84
2023-12-28 10:43:58 +04:00
927816dc42 Merge pull request 'lab 3 is ready' (#87) from volkov_rafael_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/87
2023-12-28 10:42:49 +04:00
660bc2681c Merge pull request 'kamyshov_danila_lab_3 is ready' (#90) from kamyshov_danila_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/90
2023-12-28 10:42:22 +04:00
f03ae3e342 Merge pull request 'lab 2 is ready' (#86) from volkov_rafael_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/86
2023-12-28 10:39:13 +04:00
59e524f061 Merge pull request 'kamyshov_danila_lab_2 is ready' (#89) from kamyshov_danila_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/89
2023-12-28 10:39:02 +04:00
dc26a1f48c Merge pull request 'lab 1 is ready' (#85) from volkov_rafael_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/85
2023-12-28 10:38:31 +04:00
a8f49f7572 Merge pull request 'kamyshov_danila_lab_1 is ready' (#88) from kamyshov_danila_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/88
2023-12-28 10:38:10 +04:00
Danila Kamyshov
722b354fab kamyshov_danila_lab_3 is ready 2023-12-25 21:53:03 +04:00
Danila Kamyshov
256e916485 kamyshov_danila_lab_2 is ready 2023-12-25 21:52:38 +04:00
Danila Kamyshov
9160de5e51 kamyshov_danila_lab_1 is ready 2023-12-25 21:52:12 +04:00
VolkAuf
3593a55226 lab 3 is ready 2023-12-25 21:49:32 +04:00
VolkAuf
89f2a30f71 lab 2 is ready 2023-12-25 21:49:10 +04:00
VolkAuf
7d25138f9d lab 1 is ready 2023-12-25 21:48:33 +04:00
44925143c2 Merge pull request 'romanova_adelina_lab_3 is ready' (#43) from romanova_adelina_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/43
2023-12-25 16:27:55 +04:00
c4c4873091 Merge pull request 'tepechin_kirill_lab_3' (#41) from tepechin_kirill_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/41
2023-12-25 16:27:39 +04:00
42b2bd7a78 Merge pull request 'mashkova_margarita_lab_3 ready' (#55) from mashkova_margarita_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/55
2023-12-25 14:10:55 +04:00
1555cb5642 Merge pull request 'martysheva_tamara_lab_3 is ready' (#60) from martysheva_tamara_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/60
2023-12-25 14:10:23 +04:00
de4b5c8584 Merge pull request 'alexandrov_dmitrii_lab_3 is ready' (#73) from alexandrov_dmitrii_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/73
2023-12-25 14:01:38 +04:00
27bde41368 Merge pull request 'shadaev_anton_lab_3' (#76) from shadaev_anton_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/76
2023-12-25 13:59:18 +04:00
8926cf25c0 Merge pull request 'tepechin_kirill_lab_2' (#40) from tepechin_kirill_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/40
2023-12-25 13:58:07 +04:00
fb2cd5836b Merge pull request 'shadaev_anton_lab_2' (#53) from shadaev_anton_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/53
2023-12-25 12:19:08 +04:00
48b78907cb Merge pull request 'podkorytova_yulia_lab_2 is ready' (#61) from podkorytova_yulia_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/61
2023-12-25 12:18:45 +04:00
33c9790fef Merge pull request 'mashkova_margarita_lab_2 ready' (#54) from mashkova_margarita_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/54
2023-12-25 12:18:29 +04:00
f6b74ebd83 Merge pull request 'tepechin_kirill_lab_1' (#39) from tepechin_kirill_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/39
2023-12-25 11:51:50 +04:00
60c5417187 Merge pull request 'mashkova_margarita_lab_1 ready' (#42) from mashkova_margarita_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/42
2023-12-25 11:51:36 +04:00
ac825f136b Merge pull request 'shadaev_anton_lab_1' (#44) from shadaev_anton_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/44
2023-12-25 11:23:55 +04:00
fa99584756 Merge pull request 'martysheva_tamara_lab_1' (#47) from martysheva_tamara_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/47
2023-12-25 11:23:35 +04:00
da4a529412 Merge pull request 'podkorytova_yulia_lab_1 is ready' (#59) from podkorytova_yulia_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/DAS_2023_1/pulls/59
2023-12-25 11:21:27 +04:00
3a1de5ead0 Add lab4 2023-12-23 20:50:41 +04:00
3ca3be38d3 Лабораторная 7 2023-12-23 20:42:02 +04:00
c80433f4ca Update 'shadaev_anton_lab_6/README.md' 2023-12-23 20:07:54 +04:00
1d7145da66 Add lab8 2023-12-23 20:03:38 +04:00
985bf1ba01 Add lab7 2023-12-23 19:59:59 +04:00
880d359158 Add lab6 2023-12-23 19:56:19 +04:00
7ae3de0e65 Add lab5 2023-12-23 19:40:32 +04:00
4ccd7b91ff Update 'shadaev_anton_lab_3/README.md' 2023-12-23 19:13:13 +04:00
fda332b761 Update 'shadaev_anton_lab_3/README.md' 2023-12-23 19:12:09 +04:00
cd51734f82 Add lab3 2023-12-23 18:39:38 +04:00
be23ab0a6e Лабораторная 8 2023-12-23 02:46:51 +04:00
cfb17604eb Лабораторная 3 2023-12-23 01:50:54 +04:00
13d5139b19 Лабораторная 6 2023-12-22 22:22:14 +04:00
c3c07e870e Изменил(а) на 'alexandrov_dmitrii_lab_5/readme.md' 2023-12-22 22:17:57 +04:00
0cf1b56fd2 Изменил(а) на 'alexandrov_dmitrii_lab_5/readme.md' 2023-12-22 22:12:18 +04:00
f17187207a Изменил(а) на 'alexandrov_dmitrii_lab_5/readme.md' 2023-12-22 22:10:41 +04:00
b7187c8f60 Изменил(а) на 'alexandrov_dmitrii_lab_5/readme.md' 2023-12-22 22:07:13 +04:00
81f8116770 Пятая лабораторная 2023-12-22 16:48:46 +04:00
06de5e8246 Пятая лабораторная 2023-12-22 16:08:59 +04:00
c99644f2d4 martysheva_tamara_lab_8 is ready 2023-12-21 20:57:28 +04:00
d0d2bcf2db martysheva_tamara_lab_7 is ready 2023-12-21 20:54:48 +04:00
301f7ad941 martysheva_tamara_lab_6 is ready 2023-12-21 20:50:48 +04:00
711b7d275a martysheva_tamara_lab_5 is ready 2023-12-21 20:43:51 +04:00
vladg
60be16bdbc gusev_vladislav_lab_8 is ready 2023-12-21 11:57:40 +04:00
vladg
46001bf28b gusev_vladislav_lab_7 is ready 2023-12-21 11:44:00 +04:00
vladg
fadbd75718 gusev_vladislav_lab_6 is ready 2023-12-21 11:24:57 +04:00
38854734b5 martysheva_tamara_lab_4 is ready 2023-12-17 01:31:56 +04:00
DmitriyAntonov
3f98128517 antonov_dmitry_lab_7_ready 2023-12-16 12:28:21 +04:00
yulia
9b69bb7feb podkorytova_yulia_lab_2 is ready 2023-12-15 16:38:14 +04:00
yulia
7459415f70 podkorytova_yulia_lab_2 is ready 2023-12-15 16:29:47 +04:00
yulia
6ddd513f75 podkorytova_yulia_lab_2 is ready 2023-12-15 16:29:17 +04:00
ad6a4552db martysheva_tamara_lab_3 is ready 2023-12-15 12:05:54 +04:00
yulia
7bdeec66ba podkorytova_yulia_lab_1 is ready 2023-12-14 23:35:32 +04:00
e35c9da7e0 basharin_sevastyan_lab_8 is ready 2023-12-14 17:24:26 +04:00
c83f26573c basharin_sevastyan_lab_7 is ready 2023-12-14 16:58:50 +04:00
01a4946295 basharin_sevastyan_lab_7 is ready 2023-12-14 16:57:58 +04:00
ad12c8f3ac senkin_alexander_lab_7 is ready 2023-12-14 15:16:02 +04:00
45b0dc6f0a mashkova_margarita_lab_3 ready 2023-12-14 09:39:03 +04:00
71bc735b26 mashkova_margarita_lab_2 ready 2023-12-14 01:57:37 +04:00
a1f814a584 Add lab2 2023-12-13 23:36:59 +04:00
5044e52972 tepechin_kirill_lab_8 2023-12-13 22:50:36 +04:00
d39df3e247 tepechin_kirill_lab_7 2023-12-13 22:04:05 +04:00
df28992456 martysheva_tamara_lab_2 is ready 2023-12-13 21:44:10 +04:00
f67d0375f9 tepechin_kirill_lab_6 2023-12-13 19:48:21 +04:00
977bdd56b2 martysheva_tamara_lab_1 is ready 2023-12-13 15:15:47 +04:00
063e631fc0 martysheva_tamara_lab_1 is ready 2023-12-13 15:13:47 +04:00
vladg
775bd41749 gusev_vladislav_lab_4 is ready 2023-12-13 15:02:01 +04:00
vladg
b75a601ab9 gusev_vladislav_lab_4 is ready 2023-12-13 15:01:25 +04:00
9022f7ad44 tepechin_kirill_lab_5 2023-12-13 12:23:00 +04:00
0eb56e61da tepechin_kirill_lab_5 2023-12-13 12:22:31 +04:00
04fc1cf183 fix README.md 2023-12-12 23:02:45 +04:00
170d671dff tepechin_kirill_lab_4 2023-12-12 23:01:02 +04:00
eaa28196ec Add lab1 2023-12-12 22:14:05 +04:00
b0c2b37252 romanova_adelina_lab_3 is ready 2023-12-12 21:24:00 +04:00
aac23548d7 mashkova_margarita_lab_1 ready 2023-12-12 05:28:44 +04:00
43ba1a2bb8 forgot smth 2023-12-12 03:40:00 +04:00
bc9fbb58dc forgot smth 2023-12-12 03:39:24 +04:00
1ca5dad17e tepechin_kirill_lab_3 2023-12-12 03:34:05 +04:00
79c62bdf6a tepechin_kirill_lab_2 2023-12-11 03:01:38 +04:00
49a6a252e3 tepechin_kirill_lab_1 2023-12-11 01:03:05 +04:00
DmitriyAntonov
5120eec932 antonov_dmitry_lab_8_ready 2023-12-09 21:40:16 +04:00
076820725d test 2023-11-09 06:59:07 +04:00
1682 changed files with 47536 additions and 0 deletions

View File

@ -0,0 +1,27 @@
version: '3.8'
services:
usr_service:
build:
context: /user_service
dockerfile: Dockerfile
depends_on:
- msg_service
expose:
- 8082
msg_service:
build:
context: /message_service
dockerfile: Dockerfile
expose:
- 8081
nginx:
image: nginx
ports:
- 8086:8086
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- msg_service
- usr_service

View File

@ -0,0 +1,11 @@
FROM python:3.9
EXPOSE 8081
RUN pip install Flask requests
WORKDIR /work
COPY msg_service.py ./
CMD ["python", "msg_service.py"]

View File

@ -0,0 +1,50 @@
from flask import Flask, jsonify, request, Response
from datetime import datetime
app = Flask(__name__)
msgs = {0: {'id': 0, 'from': 0, 'to': 1, 'body': 'qq', 'dt': datetime(2023, 12, 22, 8, 0)},
1: {'id': 1, 'from': 1, 'to': 0, 'body': 'qq', 'dt': datetime(2023, 12, 22, 8, 5)},
2: {'id': 2, 'from': 0, 'to': 1, 'body': 'bye', 'dt': datetime(2023, 12, 22, 8, 10)},
3: {'id': 3, 'from': 1, 'to': 1, 'body': 'bye', 'dt': datetime(2023, 12, 22, 8, 15)}}
@app.route('/', methods=['GET', 'POST'])
def get_all():
if request.method == 'POST':
dto = request.get_json()['dto']
new_id = max(msgs.keys()) + 1
msgs[new_id] = {
'id': new_id,
'from': dto['from'],
'to': dto['to'],
'body': dto['body'],
'dt': datetime.now()
}
return jsonify(msgs[new_id])
return jsonify(msgs)
@app.route('/<int:msg_id>', methods=['GET', 'PUT', 'DELETE'])
def get_by_id(msg_id):
if msg_id not in msgs.keys():
return Response(status=404)
if request.method == 'PUT':
dto = request.get_json()['dto']
msgs[msg_id] = {
'from': dto['from'],
'to': dto['to'],
'body': dto['body'],
'dt': datetime.now()
}
return msgs[msg_id]
elif request.method == 'DELETE':
msgs.pop(msg_id)
return Response(status=200)
return jsonify(msgs[msg_id])
if __name__ == '__main__':
app.run(host='0.0.0.0', use_reloader=False, port=8081)

View File

@ -0,0 +1,27 @@
events {
worker_connections 1024;
}
http {
server {
listen 8086;
listen [::]:8086;
server_name localhost;
location /msg_service/ {
proxy_pass http://msg_service:8081/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Prefix $scheme;
}
location /usr_service/ {
proxy_pass http://usr_service:8082/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Prefix $scheme;
}
}
}

View File

@ -0,0 +1,32 @@
## Задание
1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
2. Реализовать механизм синхронного обмена сообщениями между микросервисами.
3. Реализовать шлюз на основе прозрачного прокси-сервера nginx.
Вариант: сообщения и пользователи
## Выполнение
Были написаны два сервиса на языке python с технологией flask:
* Сервис msg_service, хранящий данные о сообщениях и реализующий CRUD операции с ними через HTTP запросы.
* Сервис usr_service, хранящий данные о пользователях и реализующий CRUD операции с ними через HTTP запросы.
Сервисы синхронно сообщены - сервис пользователей запрашивает данные у сервиса сообщений для получения сообщений пользователя.
Для сервисов прописаны файлы Dockerfile, описывающие создание контейнеров:
* Для обоих контейнеров выбирается Python 3.9.
* Оба контейнера проявляют порты, на которых работает приложение: 8081 для сообщений и 8082 для пользователей.
* В оба контейнера устанавливаются пакеты Flask и requests.
* Выбирается рабочая директория /work и туда копируются файлы скриптов.
* Командой запускаются сами скрипты.
Общий yaml-файл развёртки был настроен следующим образом:
* блок services, где перечислены разворачиваемые сервисы.
* для каждого сервиса прописан build, где объявляется его папка и докерфайл создания и зависимости.
* для сервиса nginx прописан порт для отображения вовне.
## Результат
Демонстрация работы в видео.
## Ссылка на видео
https://drive.google.com/file/d/1gmZsbzMmC34Uidi4u_D3nFyPAG0MuPAf/view?usp=drive_link

View File

@ -0,0 +1,11 @@
FROM python:3.9
EXPOSE 8082
RUN pip install Flask requests
WORKDIR /work
COPY usr_service.py ./
CMD ["python", "usr_service.py"]

View File

@ -0,0 +1,56 @@
import requests
from flask import Flask, jsonify, request, Response
app = Flask(__name__)
usrs = {0: {'id': 0, 'name': 'anton', 'role': 'admin', 'online': False, 'msgs_sent': [0, 2], 'msgs_got': [1, 3]},
1: {'id': 1, 'name': 'lioha', 'role': 'user', 'online': False, 'msgs_sent': [1, 3], 'msgs_got': [0, 2]}}
@app.route('/', methods=['GET', 'POST'])
def get_all():
if request.method == 'POST':
dto = request.get_json()['dto']
new_id = max(usrs.keys()) + 1
usrs[new_id] = {
'id': new_id,
'name': dto['name'],
'role': dto['role'],
'online': dto['online']
}
return jsonify(usrs[new_id])
return jsonify(usrs)
@app.route('/<int:usr_id>', methods=['GET', 'PUT', 'DELETE'])
def get_by_id(usr_id):
if usr_id not in usrs.keys():
return Response(status=404)
if request.method == 'PUT':
dto = request.get_json()['dto']
usrs[usr_id] = {
'name': dto['name'],
'role': dto['role'],
'online': dto['online']
}
return usrs[usr_id]
elif request.method == 'DELETE':
usrs.pop(usr_id)
return Response(status=200)
usr = usrs[usr_id]
msgs = []
for msg_id in usr['msgs_sent']:
msgs.append(requests.get("http://msg_service:8081/"+str(msg_id)).json())
usr['msgs_sent'] = msgs
msgs.clear()
for msg_id in usr['msgs_got']:
msgs.append(requests.get("http://msg_service:8081/"+str(msg_id)).json())
usr['msgs_got'] = msgs
return jsonify(usr)
if __name__ == '__main__':
app.run(host='0.0.0.0', use_reloader=False, port=8082)

View File

@ -0,0 +1,109 @@
import numpy as np
import time
from concurrent.futures import ProcessPoolExecutor
benchmark = {}
m_a = []
m_b = []
m_c = []
# лучше не надо
def do_multiplication(size):
global m_a
global m_b
global m_c
m_a = np.random.randint(10, size=(size, size))
m_b = np.random.randint(10, size=(size, size))
m_c = np.zeros(shape=(size, size))
bt = m_b.transpose()
start_time = time.time()
for i in range(size):
for j in range(size):
for k in range(size):
m_c[i][j] = m_c[i][j] + m_a[i][k] * bt[j][k]
return time.time() - start_time
def multiply_row(a, bt, c, size):
for j in range(size):
c[j] = sum(el_a * el_b for el_a, el_b in zip(a, bt[j]))
return c
def do_multiplication_parallel(size, proc_num):
global m_a
global m_b
global m_c
if proc_num > 61:
proc_num = 61
m_a = np.random.randint(10, size=(size, size))
m_b = np.random.randint(10, size=(size, size))
m_c = np.zeros(shape=(size, size))
bt = m_b.transpose()
start_time = time.time()
with ProcessPoolExecutor(max_workers=proc_num) as executor:
results = [executor.submit(multiply_row, m_a[i], bt, m_c[i], size) for i in range(size)]
m_c = [future.result() for future in results]
return time.time() - start_time
def do_research():
benchmark['size=100, proc_num=1: '] = do_multiplication_parallel(100, 1)
benchmark['size=300, proc_num=1: '] = do_multiplication_parallel(300, 1)
benchmark['size=500, proc_num=1: '] = do_multiplication_parallel(500, 1)
benchmark['size=100, proc_num=10: '] = do_multiplication_parallel(100, 10)
benchmark['size=300, proc_num=10: '] = do_multiplication_parallel(300, 10)
benchmark['size=500, proc_num=10: '] = do_multiplication_parallel(500, 10)
benchmark['size=100, proc_num=100: '] = do_multiplication_parallel(100, 100)
benchmark['size=300, proc_num=100: '] = do_multiplication_parallel(300, 100)
benchmark['size=500, proc_num=100: '] = do_multiplication_parallel(500, 100)
print(benchmark)
if __name__ == '__main__':
do_research()
def get_results(size, proc_num):
global m_a
global m_b
global m_c
res = "time: "
res = res + str(do_multiplication_parallel(size, proc_num))
res = res + "<br/>"
for i in range(size):
res = res + "<p>"
for a in range(size):
res = res + str(m_a[i][a]) + ", "
res = res + "&emsp;"
for b in range(size):
res = res + str(m_b[i][b]) + ", "
res = res + "&emsp;"
for c in range(size):
res = res + str(m_c[i][c]) + ", "
res = res + "</p>"
return res
def get_benchmark():
global benchmark
if len(benchmark) == 0:
do_research()
res = ''
for key, val in benchmark.items():
res = res + "<p>" + key + str(val) + "</p>"
return res

View File

@ -0,0 +1,37 @@
## Задание
Создать программу, производящую параллельные умножения реализовать двух больших квадратных матриц.
## Выполнение
Программа состоит из модуля-сервиса service и модуля для вычислений matrix.
В модуле для вычислений реализовано:
* метод do_multiplication, который в обычном режиме одним потоком умножает матрицы. Не используется, т.к. слишком медленный.
* метод multiply_row, который получает строку матрицы A, транспонированную матрицу B, строку выходной матрицы C, размер матриц и заполняет эту строку проходя по строкам транспонированной матрицы B. Возвращает заполненную строку.
* метод do_multiplication_parallel, использующий предыдущий, который получает размер матриц и количество процессов, генерирует случайные матрицы заданного размера и производит вычисления.
* метод прогона эксперимента с заполнением данных результатами. Методы интерфейса доступа.
Способ вычисления: в методе do_multiplication_parallel матрица B транспонируется, создаётся объект ProcessPoolExecutor с переданным количеством процессов, который их создаёт и распределяет по ним строки вычисляемой матрицы, а именно передавая им метод multiply_row.
Если передать методу число 1 в качестве количества процессов, то соответственно вычисление произойдёт в одном потоке.
## Результаты
Был создан Flask сервис, позволяющий получать результаты умножения случайных квадратных матриц.
Возможно задать размер и количество процессов.
Дополнительно возможно провести эксперимент и получить результаты умножения матриц размера 100, 300 и 500 одним, десятью и ста процессами.
Поскольку распараллеливание основано на процессах, а в системе имеется 6 ядер (+2 виртуальных), то максимальное увеличение производительности будет достигнуто при выборе такого количества процессов.
Более 61 потока урезается до 61 из-за системных ограничений.
Как видно из бенчмарка:
* во всех случаях скорость максимальна при выборе 10 процессов, т.е. при ближайшем к 8 числу процессов.
* в случае 100 процессов из-за издержек создания процессов малые матрицы обрабатываются на порядок дольше, нежели одним процессом.
* в случае 100 процессов благодаря распараллеливанию скорость обработки оказалась в 3 раза выше скорости обработки одним процессом.
Результаты:
![matrix5x5](screens/get5.png)
![matrix15x15](screens/get15.png)
Бенчмарк:
![bench](screens/bench.png)
## Ссылка на видео
https://drive.google.com/file/d/1_bIyLL8YGwDePwWdCFk4KxntJip6mP0t/view?usp=drive_link

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,35 @@
from flask import Flask, redirect, request, render_template
import matrix
app = Flask(__name__, template_folder='')
results = ''
@app.route('/')
def home():
global results
return render_template("template.html", results_html=results)
@app.route('/do')
def do():
global results
data = request.args
results = matrix.get_results(int(data['size']), int(data['proc_num']))
return redirect("/")
@app.route('/benchmark')
def benchmark():
global results
results = matrix.get_benchmark()
return redirect("/")
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8082)

View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Matrix</title>
</head>
<body>
<form action="http://127.0.0.1:8082/do">
<input type="number" id="size" name="size" value="5">
<input type="number" id="proc_num" name="proc_num" value="1">
<input align="center" type="submit" value="Выполнить"/>
</form>
<form action="http://127.0.0.1:8082/benchmark">
<input align="center" type="submit" value="Вывести бенчмарк"/>
</form>
{{results_html|safe}}
</body>
</html>

View File

@ -0,0 +1,109 @@
import numpy as np
import time
from concurrent.futures import ProcessPoolExecutor
benchmark = {}
matrix = []
# int переполняется
det = 0.0
# ручной метод - от размера матриц ~15 и выше может случайно винду
def get_determinant_usr_implementation(input_m):
if input_m.size == 4:
return input_m[0, 0] * input_m[1, 1] - input_m[0, 1] * input_m[1, 0]
r_det = [0] * input_m.size
for i in range(input_m.shape[0]):
r_det[i] = input_m[0, i]
if r_det[i] != 0:
if i % 2 == 1:
r_det[i] = r_det[i] * -1
r_det[i] = r_det[i] * get_determinant_usr_implementation(
np.delete(np.delete(input_m, 0, axis=0), i, axis=1))
return sum(r_det)
def get_determinant_component_usr_implementation(input_m, col):
r_det = float(input_m[0, col])
if r_det == 0:
return r_det
if col % 2 == 1:
r_det = r_det * -1
return r_det * get_determinant_usr_implementation(np.delete(np.delete(input_m, 0, axis=0), col, axis=1))
def get_determinant_component(input_m, col):
r_det = float(input_m[0, col])
if r_det == 0:
return r_det
if col % 2 == 1:
r_det = r_det * -1
return r_det * np.linalg.det(np.delete(np.delete(input_m, 0, axis=0), col, axis=1))
def calculate_determinant_parallel(size, proc_num):
global matrix
global det
if proc_num > 61:
proc_num = 61
matrix = np.random.randint(10, size=(size, size))
start_time = time.time()
with ProcessPoolExecutor(max_workers=proc_num) as executor:
if size <= 10:
components = [executor.submit(get_determinant_component_usr_implementation, matrix, i) for i in range(size)]
else:
components = [executor.submit(get_determinant_component, matrix, i) for i in range(size)]
res = [fut.result() for fut in components]
det = sum(res)
return time.time() - start_time
def do_research():
benchmark['size=2, proc_num=1: '] = calculate_determinant_parallel(2, 1)
benchmark['size=5, proc_num=1: '] = calculate_determinant_parallel(5, 1)
benchmark['size=10, proc_num=1: '] = calculate_determinant_parallel(10, 1)
benchmark['size=2, proc_num=10: '] = calculate_determinant_parallel(2, 10)
benchmark['size=5, proc_num=10: '] = calculate_determinant_parallel(5, 10)
benchmark['size=10, proc_num=10: '] = calculate_determinant_parallel(10, 10)
benchmark['size=2, proc_num=100: '] = calculate_determinant_parallel(2, 100)
benchmark['size=5, proc_num=100: '] = calculate_determinant_parallel(5, 100)
benchmark['size=10, proc_num=100: '] = calculate_determinant_parallel(10, 100)
print(benchmark)
if __name__ == '__main__':
do_research()
def get_results(size, proc_num):
global matrix
global det
res = "time: "
res = res + str(calculate_determinant_parallel(size, proc_num))
res = res + "<br/>"
for i in range(size):
res = res + "<p>"
for a in range(size):
res = res + str(matrix[i][a]) + ", "
res = res + "</p>"
res = res + "<br/><p>" + str(det) + "</p>"
return res
def get_benchmark():
global benchmark
if len(benchmark) == 0:
do_research()
res = ''
for key, val in benchmark.items():
res = res + "<p>" + key + str(val) + "</p>"
return res

View File

@ -0,0 +1,42 @@
## Задание
Создать программу, производящую поиск детерминанта больших квадратных матриц.
## Выполнение
Программа состоит из модуля-сервиса service и модуля для вычислений matrix.
В модуле для вычислений реализовано:
* метод get_determinant_usr_implementation. "Вручную" ищет детерминант переданной матрицы.
* метод get_determinant_component_usr_implementation. Ищет минорный детерминант, используя "ручной" метод, для реализации распараллеливания.
* метод get_determinant_component. Ищет минорный детерминант, используя библиотечный метод для поиска детерминантов миноров, для распараллеливания.
* метод calculate_determinant_parallel. Генерирует случайные матрицы заданного размера и производит параллельные вычисления предыдущими методами в зависимости от размера (если размер больше 10 использовать ручной метод лучше не надо, можно случайно компьютер).
* метод прогона эксперимента с заполнением данных результатами. Методы интерфейса доступа.
Способ вычисления: в методе do_multiplication_parallel матрица B транспонируется, создаётся объект ProcessPoolExecutor с переданным количеством процессов, который их создаёт и распределяет по ним вычисление минорных детерминантов первой строки для последующего сложения, в зависимости от размера матрицы используется get_determinant_component_usr_implementation или get_determinant_component.
Если передать методу число 1 в качестве количества процессов, то соответственно вычисление произойдёт в одном потоке.
## Результаты
Был создан Flask сервис, позволяющий получать детерминанты случайных квадратных матриц.
Возможно задать размер и количество процессов.
Дополнительно возможно провести эксперимент и получить результаты умножения матриц размера 2, 5 и 10 одним, десятью и ста процессами.
Для создания бенчмарка был сокращён размер матриц, поскольку:
* ручной метод не может в обозримом будущем посчитать матрицу размером больше 15-20.
* библиотечный метод считает детерминант за секунду-две без заметных изменений от увеличения количества процессов обработки. анализировать результаты не получится (разве что заключить, что метод не нуждается в распараллеливании).
Поскольку распараллеливание основано на процессах, а в системе имеется 6 ядер (+2 виртуальных), то максимальное увеличение производительности будет достигнуто при выборе такого количества процессов.
Более 61 потока урезается до 61 из-за системных ограничений.
Как видно из бенчмарка:
* в случае больших размеров скорость максимальна при выборе 100 (61) процессов, можно заключить, что алгоритм "ручной" алгоритм хорошо реагирует на распараллеливание.
* в случае 100 процессов из-за издержек создания процессов малые матрицы обрабатываются на порядок дольше, нежели одним процессом.
* в случае 100 процессов благодаря распараллеливанию скорость обработки матрицы размером 10 оказалась в 5 раз выше скорости обработки одним процессом.
Результаты:
![matrix5x5](screens/5x5.png)
![matrix30x30](screens/30x30.png)
Бенчмарк:
![bench](screens/bench.png)
## Ссылка на видео
https://drive.google.com/file/d/1kxMccJDCQsVK1qcrsiQKDXUuDzPQ1Lsc/view?usp=drive_link

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -0,0 +1,35 @@
from flask import Flask, redirect, request, render_template
import matrix
app = Flask(__name__, template_folder='')
results = ''
@app.route('/')
def home():
global results
return render_template("template.html", results_html=results)
@app.route('/do')
def do():
global results
data = request.args
results = matrix.get_results(int(data['size']), int(data['proc_num']))
return redirect("/")
@app.route('/benchmark')
def benchmark():
global results
results = matrix.get_benchmark()
return redirect("/")
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8082)

View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Matrix</title>
</head>
<body>
<form action="http://127.0.0.1:8082/do">
<input type="number" id="size" name="size" value="5">
<input type="number" id="proc_num" name="proc_num" value="1">
<input align="center" type="submit" value="Выполнить"/>
</form>
<form action="http://127.0.0.1:8082/benchmark">
<input align="center" type="submit" value="Вывести бенчмарк"/>
</form>
{{results_html|safe}}
</body>
</html>

View File

@ -0,0 +1,20 @@
## Задание
Балансировка нагрузки в распределённых системах при помощи открытых технологий на примерах.
Написать небольшое эссе (буквально несколько абзацев) своими словами (пожалуйста не пользуйтесь гуглом :). А помогут Вам в этом вопросы из списка:
1. Какие алгоритмы и методы используются для балансировки нагрузки?
2. Какие открытые технологии существуют для балансировки нагрузки?
3. Как осуществляется балансировка нагрузки на базах данных?
4. Реверс-прокси как один из элементов балансировки нагрузки.
## Результат
Балансировка нагрузки - это управление распределением траффика между несколькими сервисами, системными компонентами. Необходимо для повышения надёжности и производительности системы.
Для балансировки нагрузки используются следующие методы: последовательная циклическая передача запросов по списку обработчиков, передача запросов в наименее загруженный обработчик, либо также, но с учётом его вместимости, передача запросов в обработчик с наименьшим временем отклика, передача запросов от одного источника одному серверу с обработчиками.
Для балансировки могут использоваться программы: прокси-сервера, например Nginx, в современных системах развёртки они могут быть "встроены" (Azure). Балансировка может быть реализована также на аппаратном уровне сетевых устройств, предоставляться облачными сервисами.
Для БД также есть прокси (PL/Proxy), на уровне серверов СУБД могут распределяться таблицы (по серверам) одной БД, либо даже расщепляться и распределяться отдельные таблицы. Вообще многое управление может быть решено на уровне выше СУБД - в приложениях, существуют специализированные приложения для синхронной и асинхронной работы с БД, в том числе такие, которые осуществляют распределение запросов.
Обратное прокси - это прокси, который работает вовнутрь системы. То есть, он ретранслирует запросы из внешней сети на подключённые сервера внутренней. Как элемент распределения нагрузки он важен, так как является тем узлом системы, через который будут проходить запросы, которые необходимо распределять. Соответственно многие решения реализуются на уровне прокси-серверов.

View File

@ -0,0 +1,32 @@
## Задание
Написать небольшое эссе (буквально несколько абзацев) своими словами (пожалуйста не пользуйтесь гуглом :) ) на тему "Устройство распределенных систем". А помогут Вам в этом вопросы из списка:
* Зачем сложные системы (например, социальная сеть ВКонтакте) пишутся в "распределенном" стиле, где каждое отдельное приложение (или сервис) функционально выполняет только ограниченный спектр задач?
* Для чего были созданы системы оркестрации приложений? Каким образом они упрощают / усложняют разработку и сопровождение распределенных систем?
* Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями?
* Какие преимущества и недостатки распределенных приложений существуют на Ваш взгляд?
* Целесообразно ли в сложную распределенную систему внедрять параллельные вычисления? Приведите примеры, когда это действительно нужно, а когда нет.
## Эссе
Распределённые системы - это ещё одно проявление тенденции к дроблению процессов и структур. Такое уже проявилось в проектировании, конструировании и т.д.
Здесь оно проявляется в программных системах. Вызвано это, во-первых, качественным ростом навыков и инструментов разработки, что открыло технический и гносеологический доступ к более сложным системам и технологиям для их освоения, во-вторых, ростом размера систем и запросов к ним, соответственно появление нужды в сложных больших системах.
Распределённые системы - это системы, состоящие из множества размещённых независимо программ, вместе исполняющих общую функциональность.
Для сложных, особенно сетевых, систем это означает удобные развёртывание и масштабирование: можно развернуть множество узлов, распределить по ним функционал, при необходимости легко заменить, переместить или дублировать какую-то часть функционала.
Также это означает большую надёжность: если сломается какой-то узкоспециализированный сервис, остальной функционал продолжит работу.
Для большего дробления и лучшей организации были созданы системы оркестрации приложений - системы, которые создают множество контейнеров или иных отделённых специализированных микросред для сервисов и программ для оптимизации их работы и централизованного ими управления.
С другой стороны, они позволяют интегрировать системы через сеть, объединяя такие среды с разных машин в единую среду для работы одной программной системы.
Они как упрощают разработку, позволяя организовать её через сеть, тестировать распределённые по микросредам систему, упрощают сопровождение, так как предоставляют удобное управление своими узлами и средами.
В то же время они создают ещё один слой разработки и проектирования, требуют дополнительных ресурсов.
Очереди обработки сообщений нужны для организации асинхронного взаимодействия частей распределённых приложений, они выделить в отдельный слой всю информацию о связях сервисов. Сообщения могут быть чем угодно - командами, данными, любой нужной сервисам от других сервисов информацией.
Выделение этого слоя позволяет снизить связность сервисов, что является одной из причин распределения.
Примущества распределённых систем в удобстве развёртки и распределения разработки. Недостатки в требовательности к координации, сильном усложнении используемых инструментов и технологий.
В сложную распределённую систему может быть как целесообразно, так и нецелесообразно внедрять параллельные вычисления. Для распределённых систем оно будет более целесообразным, так как распределённость сама по себе подразумевает некоторую параллельность.
В общем случае, технологии внедряются по необходимости: когда достигнут предел (скорее всего временной) возможностей последовательной обработки отдельной машиной. Для распределённых же систем распараллеливание будет более естественным процессом, благодаря средствам развёртки, таким как системы оркестрации, становится удобным создавать большие вычислительные сети.
Тем не менее, в таком случае может оказаться, что вычислительные мощности излишни для задач, которые не может решить отдельная машина. Параллельная обработка нужна только для незаурядных по объёмам или временным рамкам задач: например для научных вычислений, для оперирования большими объёмами информации, обучения больших машинных сетей. Это задачи, с которыми одна машина не может адекватно справиться.

Binary file not shown.

View File

@ -0,0 +1,32 @@
# Используем образ .NET Runtime как базовый образ для нашего контейнера
FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
# Устанавливаем рабочую директорию в контейнере
WORKDIR /app
# Используем образ .NET SDK для сборки и публикации приложения
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
# Устанавливаем рабочую директорию для сборки
WORKDIR /src
# Копируем файл проекта в контейнер и восстанавливаем зависимости
COPY ["Part1.csproj", "."]
RUN dotnet restore "./Part1.csproj"
# Копируем все остальные файлы проекта в контейнер
COPY . .
# Устанавливаем рабочую директорию
WORKDIR "/src/."
# Собираем проект с конфигурацией Release
RUN dotnet build "Part1.csproj" -c Release -o /app/build
# Создаем стадию публикации на основе сборки
FROM build AS publish
# Публикуем проект с конфигурацией Release
RUN dotnet publish "Part1.csproj" -c Release -o /app/publish /p:UseAppHost=false
# Создаем финальный образ на основе базового образа .NET Runtime
FROM base AS final
# Устанавливаем рабочую директорию в контейнере
WORKDIR /app
# Копируем опубликованные файлы из стадии publish
COPY --from=publish /app/publish .
# Задаем точку входа для контейнера
ENTRYPOINT ["dotnet", "Part1.dll"]

View File

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>.</DockerfileContext>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>Docker</ActiveDebugProfile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34018.315
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Part1", "Part1.csproj", "{580DE38F-6CC0-4B13-A1CA-10AFD2316A7E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{580DE38F-6CC0-4B13-A1CA-10AFD2316A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{580DE38F-6CC0-4B13-A1CA-10AFD2316A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{580DE38F-6CC0-4B13-A1CA-10AFD2316A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{580DE38F-6CC0-4B13-A1CA-10AFD2316A7E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C15D9C92-B603-4D55-B53A-D42F2092B83B}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,55 @@
var directoryPath = Environment.GetEnvironmentVariable("APP_DIR");
if (directoryPath == null)
{
Console.WriteLine("Не найден переменная среды адреса");
return;
}
var inputFilesPath = Path.Combine(directoryPath, "data");
var outputFilePath = Path.Combine(directoryPath, "result");
Console.WriteLine($"Входная папка: {inputFilesPath}");
Console.WriteLine($"Выходная папка: {outputFilePath}");
try
{
if (Directory.Exists(inputFilesPath))
{
var files = Directory.GetFiles(inputFilesPath);
if (files.Length > 0)
{
var fileWithMostLines = files
.Select(filePath => new { FilePath = filePath, LineCount = File.ReadLines(filePath).Count() })
.OrderByDescending(x => x.LineCount)
.First();
Console.WriteLine($"Файл с наибольшим количеством строк: {fileWithMostLines.FilePath}");
Console.WriteLine($"Количество строк в файле: {fileWithMostLines.LineCount}");
string outputFileName = "inputFileFor2Program.txt";
string outputFilePathWithFileName = Path.Combine(outputFilePath, outputFileName);
if (File.Exists(outputFilePathWithFileName))
{
Console.WriteLine($"Файл {outputFilePathWithFileName} уже существует удалим его");
File.Delete(outputFilePathWithFileName);
}
File.Copy(fileWithMostLines.FilePath, outputFilePathWithFileName);
Console.WriteLine($"Файл перемещен в {outputFilePathWithFileName}");
}
else
{
Console.WriteLine("В директории нет файлов.");
}
}
else
{
Console.WriteLine("Указанной директории не существует.");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}

View File

@ -0,0 +1,10 @@
{
"profiles": {
"Part1": {
"commandName": "Project"
},
"Docker": {
"commandName": "Docker"
}
}
}

View File

@ -0,0 +1,34 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"Part1/1.0.0": {
"dependencies": {
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.19.4"
},
"runtime": {
"Part1.dll": {}
}
},
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets/1.19.4": {}
}
},
"libraries": {
"Part1/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets/1.19.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aKxpRAUIxDrnSnyr7xJWGixOBgsB7Z4oHpWRkpRzzq04kfze4mN7944gRc4X9H2U5KG3A/btF74kavkO8KXqCg==",
"path": "microsoft.visualstudio.azure.containers.tools.targets/1.19.4",
"hashPath": "microsoft.visualstudio.azure.containers.tools.targets.1.19.4.nupkg.sha512"
}
}
}

View File

@ -0,0 +1,9 @@
{
"runtimeOptions": {
"tfm": "net6.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "6.0.0"
}
}
}

View File

@ -0,0 +1 @@
/app/bin/Debug/net6.0/Part1.dll

View File

@ -0,0 +1 @@
--additionalProbingPath /.nuget/fallbackpackages

View File

@ -0,0 +1 @@
NoConflict

View File

@ -0,0 +1 @@
0e4a486e8d81d00f192d2816ae8892d1536fbf86ae98681bec683af12578939b

View File

@ -0,0 +1 @@
Part1

View File

@ -0,0 +1 @@
TTrD3JA/y3l0cS9dhrio/jKEUhxkBVsj/mloUOffZUA=

View File

@ -0,0 +1 @@
sZOqnUMBAK57oEsGNoqXdIkxerNH1aGLv3IbvWssdAk=

View File

@ -0,0 +1 @@
sha256:dd0aa4847bd3e3b9d3970b1dd1e90ebd2e90e731873663167e3374c01b19fec1

View File

@ -0,0 +1 @@
DotNetCore

View File

@ -0,0 +1 @@
{"C:\\Users\\73bul\\vsdbg\\vs2017u5":"/remote_debugger","C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Sdks\\Microsoft.Docker.Sdk\\tools\\TokenService.Proxy\\linux-x64\\net6.0":"/TokenService.Proxy","C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Sdks\\Microsoft.Docker.Sdk\\tools\\HotReloadProxy\\linux-x64\\net6.0":"/HotReloadProxy","C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\CommonExtensions\\Microsoft\\HotReload":"/HotReloadAgent","D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1":"/src/","C:\\Users\\73bul\\.nuget\\packages\\":"/.nuget/fallbackpackages"}

View File

@ -0,0 +1 @@
ID=.; if [ -e /etc/os-release ]; then . /etc/os-release; fi; if [ $ID = alpine ] && [ -e /remote_debugger/linux-musl-x64/vsdbg ]; then VSDBGPATH=/remote_debugger/linux-musl-x64; else VSDBGPATH=/remote_debugger; fi; $VSDBGPATH/vsdbg --interpreter=vscode

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]

View File

@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Part1")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Part1")]
[assembly: System.Reflection.AssemblyTitleAttribute("Part1")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Создано классом WriteCodeFragment MSBuild.

View File

@ -0,0 +1 @@
d43ff5423a16d15322b758e4b8a4a64d2ecac68213123491629720a8f32bfc9b

View File

@ -0,0 +1,13 @@
is_global = true
build_property.TargetFramework = net6.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Part1
build_property.ProjectDir = D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =

View File

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@ -0,0 +1 @@
85e76181036589b7b80e39219fc840736371361aec3e5d3ab435e7bccd4b3a70

View File

@ -0,0 +1,14 @@
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\bin\Debug\net6.0\Part1.exe
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\bin\Debug\net6.0\Part1.deps.json
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\bin\Debug\net6.0\Part1.runtimeconfig.json
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\bin\Debug\net6.0\Part1.dll
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\bin\Debug\net6.0\Part1.pdb
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\Part1.GeneratedMSBuildEditorConfig.editorconfig
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\Part1.AssemblyInfoInputs.cache
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\Part1.AssemblyInfo.cs
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\Part1.csproj.CoreCompileInputs.cache
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\Part1.dll
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\refint\Part1.dll
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\Part1.pdb
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\Part1.genruntimeconfig.cache
D:\Документы\GitHub\DAS_2023_1\almukhammetov_bulat_lab_2\Part1\obj\Debug\net6.0\ref\Part1.dll

View File

@ -0,0 +1 @@
e58803a5fe1e3b75ac9b204bdcc313077684139e3e7407db3e2e667ff77ba1c1

View File

@ -0,0 +1,69 @@
{
"format": 1,
"restore": {
"D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\Part1.csproj": {}
},
"projects": {
"D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\Part1.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\Part1.csproj",
"projectName": "Part1",
"projectPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\Part1.csproj",
"packagesPath": "C:\\Users\\73bul\\.nuget\\packages\\",
"outputPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\73bul\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": {
"target": "Package",
"version": "[1.19.4, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\73bul\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.8.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\73bul\.nuget\packages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.visualstudio.azure.containers.tools.targets\1.19.4\build\Microsoft.VisualStudio.Azure.Containers.Tools.Targets.props" Condition="Exists('$(NuGetPackageRoot)microsoft.visualstudio.azure.containers.tools.targets\1.19.4\build\Microsoft.VisualStudio.Azure.Containers.Tools.Targets.props')" />
</ImportGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgMicrosoft_VisualStudio_Azure_Containers_Tools_Targets Condition=" '$(PkgMicrosoft_VisualStudio_Azure_Containers_Tools_Targets)' == '' ">C:\Users\73bul\.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.19.4</PkgMicrosoft_VisualStudio_Azure_Containers_Tools_Targets>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.visualstudio.azure.containers.tools.targets\1.19.4\build\Microsoft.VisualStudio.Azure.Containers.Tools.Targets.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.visualstudio.azure.containers.tools.targets\1.19.4\build\Microsoft.VisualStudio.Azure.Containers.Tools.Targets.targets')" />
</ImportGroup>
</Project>

View File

@ -0,0 +1,166 @@
{
"version": 3,
"targets": {
"net6.0": {
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets/1.19.4": {
"type": "package",
"build": {
"build/Microsoft.VisualStudio.Azure.Containers.Tools.Targets.props": {},
"build/Microsoft.VisualStudio.Azure.Containers.Tools.Targets.targets": {}
}
}
}
},
"libraries": {
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets/1.19.4": {
"sha512": "aKxpRAUIxDrnSnyr7xJWGixOBgsB7Z4oHpWRkpRzzq04kfze4mN7944gRc4X9H2U5KG3A/btF74kavkO8KXqCg==",
"type": "package",
"path": "microsoft.visualstudio.azure.containers.tools.targets/1.19.4",
"hasTools": true,
"files": [
".nupkg.metadata",
".signature.p7s",
"CHANGELOG.md",
"EULA.md",
"ThirdPartyNotices.txt",
"build/Container.props",
"build/Container.targets",
"build/Microsoft.VisualStudio.Azure.Containers.Tools.Targets.props",
"build/Microsoft.VisualStudio.Azure.Containers.Tools.Targets.targets",
"build/Rules/GeneralBrowseObject.xaml",
"build/Rules/cs-CZ/GeneralBrowseObject.xaml",
"build/Rules/de-DE/GeneralBrowseObject.xaml",
"build/Rules/es-ES/GeneralBrowseObject.xaml",
"build/Rules/fr-FR/GeneralBrowseObject.xaml",
"build/Rules/it-IT/GeneralBrowseObject.xaml",
"build/Rules/ja-JP/GeneralBrowseObject.xaml",
"build/Rules/ko-KR/GeneralBrowseObject.xaml",
"build/Rules/pl-PL/GeneralBrowseObject.xaml",
"build/Rules/pt-BR/GeneralBrowseObject.xaml",
"build/Rules/ru-RU/GeneralBrowseObject.xaml",
"build/Rules/tr-TR/GeneralBrowseObject.xaml",
"build/Rules/zh-CN/GeneralBrowseObject.xaml",
"build/Rules/zh-TW/GeneralBrowseObject.xaml",
"build/ToolsTarget.props",
"build/ToolsTarget.targets",
"icon.png",
"microsoft.visualstudio.azure.containers.tools.targets.1.19.4.nupkg.sha512",
"microsoft.visualstudio.azure.containers.tools.targets.nuspec",
"tools/Microsoft.VisualStudio.Containers.Tools.Common.dll",
"tools/Microsoft.VisualStudio.Containers.Tools.Shared.dll",
"tools/Microsoft.VisualStudio.Containers.Tools.Tasks.dll",
"tools/Newtonsoft.Json.dll",
"tools/System.Security.Principal.Windows.dll",
"tools/cs/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/cs/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/cs/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/de/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/de/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/de/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/es/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/es/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/es/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/fr/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/fr/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/fr/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/it/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/it/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/it/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/ja/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/ja/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/ja/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/ko/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/ko/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/ko/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/pl/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/pl/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/pl/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/pt-BR/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/pt-BR/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/pt-BR/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/ru/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/ru/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/ru/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/tr/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/tr/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/tr/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/utils/KillProcess.exe",
"tools/zh-Hans/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/zh-Hans/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/zh-Hans/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll",
"tools/zh-Hant/Microsoft.VisualStudio.Containers.Tools.Common.resources.dll",
"tools/zh-Hant/Microsoft.VisualStudio.Containers.Tools.Shared.resources.dll",
"tools/zh-Hant/Microsoft.VisualStudio.Containers.Tools.Tasks.resources.dll"
]
}
},
"projectFileDependencyGroups": {
"net6.0": [
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets >= 1.19.4"
]
},
"packageFolders": {
"C:\\Users\\73bul\\.nuget\\packages\\": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\Part1.csproj",
"projectName": "Part1",
"projectPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\Part1.csproj",
"packagesPath": "C:\\Users\\73bul\\.nuget\\packages\\",
"outputPath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\obj\\",
"projectStyle": "PackageReference",
"configFilePaths": [
"C:\\Users\\73bul\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": {
"target": "Package",
"version": "[1.19.4, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json"
}
}
}
}

View File

@ -0,0 +1,10 @@
{
"version": 2,
"dgSpecHash": "7dh4jTe7z/bzPj031BFBaN5wJQIUb8+xcjK/QcTHCHL00KdA9iUU9CGuqpy1J2k+tiVnyH85x0XwK2FaxOsqmg==",
"success": true,
"projectFilePath": "D:\\Документы\\GitHub\\DAS_2023_1\\almukhammetov_bulat_lab_2\\Part1\\Part1.csproj",
"expectedPackageFiles": [
"C:\\Users\\73bul\\.nuget\\packages\\microsoft.visualstudio.azure.containers.tools.targets\\1.19.4\\microsoft.visualstudio.azure.containers.tools.targets.1.19.4.nupkg.sha512"
],
"logs": []
}

Binary file not shown.

View File

@ -0,0 +1,20 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Part2.csproj", "."]
RUN dotnet restore "./Part2.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "Part2.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Part2.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Part2.dll"]

View File

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>.</DockerfileContext>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.4" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>Docker</ActiveDebugProfile>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34018.315
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Part2", "Part2.csproj", "{9FC3CC84-848B-476A-9724-A216590556DC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9FC3CC84-848B-476A-9724-A216590556DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9FC3CC84-848B-476A-9724-A216590556DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9FC3CC84-848B-476A-9724-A216590556DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9FC3CC84-848B-476A-9724-A216590556DC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {ED512BB2-49D3-4653-AADD-90FCCAD2C9BE}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,43 @@
var directoryPath = Environment.GetEnvironmentVariable("APP_DIR");
if (directoryPath == null)
{
Console.WriteLine("Не найден переменная среды адреса");
return;
}
var inputDataFilePath = Path.Combine(directoryPath, "result/inputFileFor2Program.txt");
var outputResultFilePath = Path.Combine(directoryPath, "result/result.txt");
Console.WriteLine($"Входной файл для второй программы: {inputDataFilePath}");
Console.WriteLine($"Выходной файл для второй программы {outputResultFilePath}");
if (File.Exists(inputDataFilePath))
{
// Чтение чисел из файла и поиск наибольшего числа
string[] lines = File.ReadAllLines(inputDataFilePath);
double largestNumber = double.MinValue; // Инициализируем наименьшим возможным значением
foreach (string line in lines)
{
if (double.TryParse(line, out double number))
{
if (number > largestNumber)
{
largestNumber = number;
}
}
}
double result = Math.Pow(largestNumber, 2);
// Сохраняем результат в файл
File.WriteAllText(outputResultFilePath, DateTime.Now.ToString() + "\nРезультат программы 2: " + result.ToString());
Console.WriteLine($"Наибольшее число в файле: {largestNumber}");
Console.WriteLine($"Квадрат наибольшего числа: {result}");
Console.WriteLine($"Результат сохранен в {outputResultFilePath}");
}
else
{
Console.WriteLine("Файл с данными не найден.");
}

View File

@ -0,0 +1,10 @@
{
"profiles": {
"Part2": {
"commandName": "Project"
},
"Docker": {
"commandName": "Docker"
}
}
}

View File

@ -0,0 +1,34 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"Part2/1.0.0": {
"dependencies": {
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.19.4"
},
"runtime": {
"Part2.dll": {}
}
},
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets/1.19.4": {}
}
},
"libraries": {
"Part2/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets/1.19.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aKxpRAUIxDrnSnyr7xJWGixOBgsB7Z4oHpWRkpRzzq04kfze4mN7944gRc4X9H2U5KG3A/btF74kavkO8KXqCg==",
"path": "microsoft.visualstudio.azure.containers.tools.targets/1.19.4",
"hashPath": "microsoft.visualstudio.azure.containers.tools.targets.1.19.4.nupkg.sha512"
}
}
}

View File

@ -0,0 +1,9 @@
{
"runtimeOptions": {
"tfm": "net6.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "6.0.0"
}
}
}

View File

@ -0,0 +1 @@
/app/bin/Debug/net6.0/Part2.dll

View File

@ -0,0 +1 @@
--additionalProbingPath /.nuget/fallbackpackages

View File

@ -0,0 +1 @@
1fe2d124ad6b2225a5f45fabeb3dd05dd90e633345ba8766d9cdca167467b2b5

View File

@ -0,0 +1 @@
Part2

Some files were not shown because too many files have changed in this diff Show More