зацените код. прилетел инцедент
От: undo75  
Дата: 12.02.24 07:54
Оценка: -3 :)
по таймауту у них падает.
опуская подробности чисто функция. комент убил наповал:
а действитель — херли тут по таймауту падать-то?
кто это пропустил я хз...
кстати. нахер так применять линкью? чтобы говно было геморней отлавливать в тексте на три экрана? кто-то может объяснить?

 protected override async Task<AgricultureJournalUnit[]> HandleAsync(
     GetSubOperations query,
     CancellationToken token = default)
 {
     using (var dbConnectionString = ConnectionFactory.CreateDbConnection(MainDb.Replica1))
     using (var context = ConnectionFactory.CreateWebDbContext(dbConnectionString))
     {
         var entities = context.SubOperations
             .AsNoTracking()
             .Include(x => x.Operation)
             .Include(x => x.User)
             .Include(x => x.Account)
             .Include($"{nameof(Db.Model.WebDb.Public.SubOperation.Seeds)}.{nameof(Db.Model.WebDb.Public.Seed)}.{nameof(Db.Model.WebDb.Public.Variety)}")
             .Include($"{nameof(Db.Model.WebDb.Public.SubOperation.Seeds)}.{nameof(Db.Model.WebDb.Public.SubOperationSoilProtector.Stock)}")
             .Include($"{nameof(Db.Model.WebDb.Public.SubOperation.SoilProtectors)}.{nameof(Db.Model.WebDb.Public.SubOperationSoilProtector.Stock)}")
             .Include($"{nameof(Db.Model.WebDb.Public.SubOperation.SoilProtectors)}.{nameof(Db.Model.WebDb.Public.SubOperationSoilProtector.SoilProtector)}")
             .Include($"{nameof(Db.Model.WebDb.Public.SubOperation.Fertilizers)}.{nameof(Db.Model.WebDb.Public.SubOperationFertilizer.Stock)}")
             .Include($"{nameof(Db.Model.WebDb.Public.SubOperation.Fertilizers)}.{nameof(Db.Model.WebDb.Public.SubOperationFertilizer.Fertilizer)}")
             .Include($"{nameof(Db.Model.WebDb.Public.Machine)}.{nameof(Db.Model.WebDb.Public.Model)}.{nameof(Db.Model.WebDb.Manufacturer)}")
             .Include($"{nameof(Db.Model.WebDb.Public.AgroInstrument)}.{nameof(Db.Model.WebDb.Public.Model)}.{nameof(Db.Model.WebDb.Manufacturer)}");
         entities = entities.Where(x => x.Operation.CropField.Field.Layer.ClientId == query.CurrentClientId);

         if (query.Ids.Any())
         {
             entities = entities.Where(x => query.Ids.Contains(x.Id));
         }

         if (query.Years.Any())
         {
             entities = entities.Where(x => query.Years.Contains(x.Operation.CropField.Year));
         }

         if (query.OperationModifiedIdFrom.HasValue)
         {
             entities = entities.Where(x => x.Operation.ModifiedId >= query.OperationModifiedIdFrom && x.Operation.ModifiedId <= query.OperationModifiedIdTo);
         }
         else if (query.OperationIds.Any())
         {
             entities = entities.Where(x => query.OperationIds.Contains(x.OperationId));
         }

         if (!query.IncludeDeleted)
         {
             entities = entities.Where(x => !x.IsDeleted && !x.Operation.IsDeleted);
         }

         if (query.TreatmentId.HasValue)
         {
             entities = entities.Where(x => x.Operation.TreatmentTypeId == query.TreatmentId.Value);
         }

         if (query.AgroUnitType.HasValue)
         {
             entities = entities.Where(x => x.PlanType == (int)query.AgroUnitType.Value);
         }

         if (query.PlanType.HasValue)
         {
             entities = entities.Where(x => x.Operation.PlantType == (int)query.PlanType.Value);
         }

         if (query.DateFrom.HasValue)
         {
             entities = entities.Where(x => x.DateStart >= query.DateFrom.Value);
         }

         if (query.DateTo.HasValue)
         {
             entities = entities.Where(x => x.DateEnd <= query.DateTo.Value);
         }

         // почему тут огромный селект? потому что Seed.SoilProtectionsJson не селектится, но будем считать, что это для перформанса выборки семечек:)
         return (await entities.Select(x => new
         {
             x.Id,
             x.OperationId,
             x.DateStart,
             x.DateEnd,
             x.Square,
             x.PlanType,
             x.MachineId,
             x.MachineModelId,
             x.AgroInstrumentId,
             x.AmountInstrument,
             x.UserId,
             x.Fuel,
             x.FuelTotal,
             x.FuelNormal,
             x.Comment,
             x.IsNightShift,
             x.DistanceTraveled,
             x.Created,
             x.Quota,
             x.HandSquare,
             x.AppgoverUserId,
             x.ResponsibleId,
             x.CreatorId,
             x.Route,
             x.SquareWorkOnField,
             x.EngineWorkTime,
             x.Series,
             x.QualityControl,
             x.SpeedometerReadingsStart,
             x.SpeedometerReadingsEnd,
             x.RidersWithLoad,
             x.RidersWithoutLoad,
             x.TransportedTons,
             x.TotalMileage,
             x.IsExportedTo1C,
             x.IsChronometrage,
             x.IsAssist,
             x.IsApproved,
             x.AssistPercent,
             x.LastRecalculate,
             x.AccountId,
             x.WaybillNumber,
             x.WaybillNumberAddedManually,
             x.DataFillingMethod,
             x.IsDeleted,
             x.Fertilizers,
             x.SoilProtectors,
             x.Machine,
             x.AgroInstrument,
             x.Operation.CropField.Field.LayerId,
             User = x.UserId != null
                 ? new
                 {
                     x.User.Id,
                     x.User.Name,
                     x.User.Surname,
                     x.User.MiddleName,
                     x.User.Birthday,
                     x.User.DrivingLicenseNumber,
                     x.User.PersonnelNumber,
                 }
                 : null,
             x.Account,
             Seeds = x.Seeds.Select(s => new
             {
                 s.Id,
                 s.SeedId,
                 s.Amount,
                 s.AmountTotalHand,
                 Stock = s.Stock,
                 Seed = new
                 {
                     s.SeedId,
                     s.Seed.Reproduction,
                     s.Seed.VarietyId,
                     Variety = new
                     {
                         s.Seed.Variety.Id,
                         s.Seed.Variety.Name,
                         s.Seed.Variety.CropId,
                         s.Seed.Reproduction,
                     }
                 }
             })
         }).ToArrayAsync(token))
         .Where(x => (!query.LayerIds.Any() || query.LayerIds.Contains(x.LayerId) || query.LayerIds.Contains(query.SystemLayerId))
             && (!query.AvailableLayerIds.Any() || query.AvailableLayerIds.Contains(x.LayerId)))
         .Select(x =>
         {
             var result = new AgricultureJournalUnit
             {
                 Id = x.Id,
                 IdJournal = x.OperationId,
                 DateStart = x.DateStart,
                 DateEnd = x.DateEnd,
                 Square = _rounderSquare.Round(x.Square),
                 PlanType = (AgroUnitType)x.PlanType,
                 IdMachine = x.MachineId,
                 IdModelTS = x.MachineModelId,
                 IdInstrument = x.AgroInstrumentId,
                 AmountInstrument = x.AmountInstrument,
                 IdUser = x.UserId,
                 Fuel = x.Fuel,
                 FuelTotal = x.FuelTotal,
                 NormaFuel = x.FuelNormal,
                 Comment = x.Comment,
                 IsNigthShift = x.IsNightShift,
                 DistanceTraveled = x.DistanceTraveled,
                 Created = x.Created,
                 Quota = x.Quota,
                 SquareHand = _rounderSquare.Round(x.HandSquare ?? 0),
                 SupervisorId = x.AppgoverUserId,
                 ResponsibleId = x.ResponsibleId,
                 CreatorId = x.CreatorId,
                 RouteId = x.Route,
                 SquareWorkOnField = _rounderSquare.Round(x.SquareWorkOnField ?? 0),
                 EngineWorkHour = x.EngineWorkTime,
                 Series = x.Series,
                 QualityControl = x.QualityControl,
                 SpeedometerReadingsStart = x.SpeedometerReadingsStart,
                 SpeedometerReadingsEnd = x.SpeedometerReadingsEnd,
                 RidersWithLoad = x.RidersWithLoad,
                 RidersWithoutLoad = x.RidersWithoutLoad,
                 TransportedTons = x.TransportedTons,
                 TotalMileage = x.TotalMileage,
                 WasExported1c = x.IsExportedTo1C,
                 IsChronometrage = x.IsChronometrage,
                 BrigadeWaySupportingWork = x.IsAssist,
                 Approved = x.IsApproved,
                 PercentForBrigadeWay = x.AssistPercent,
                 LastDateRecalculateArea = x.LastRecalculate,
                 ExpenseAccountId = x.AccountId,
                 WaybillNumber = x.WaybillNumber,
                 WaybillNumberAddedManually = x.WaybillNumberAddedManually,
                 DataFillingMethod = (DataFillingMethod)x.DataFillingMethod,
                 IsDeleted = x.IsDeleted,
                 ExpenseAccountValue = x.Account?.Value,
                 Seeds = x.Seeds.Select(s => new AgroUnitSeed
                 {
                     Id = s.Id,
                     IdSeed = s.SeedId,
                     Amount = s.Amount,
                     AmountTotalHand = s.AmountTotalHand,
                     SaveTotalHand = s.AmountTotalHand != null,
                     StockName = s.Stock?.Name,
                     StockId = s.Stock?.Id,
                     IdUnit = x.Id,
                     Seed = new Seed
                     {
                         Id = s.SeedId,
                         Reproduction = s.Seed.Reproduction,
                         IdVariety = s.Seed.VarietyId,
                         Variety = new Variety
                         {
                             Id = s.Seed.Variety.Id,
                             Name = s.Seed.Variety.Name,
                             IdCrop = s.Seed.Variety.CropId,
                             Reproduction = s.Seed.Reproduction,
                         }
                     }
                 }).ToList(),
                 Fertilizers = x.Fertilizers.Select(s => new AgroUnitFertilizer
                 {
                     Id = s.Id,
                     IdFertilizer = s.FertilizerId,
                     Amount = s.Amount,
                     AmountTotalHand = s.AmountTotalHand,
                     SaveTotalHand = s.AmountTotalHand != null,
                     StockName = s.Stock?.Name,
                     StockId = s.StockId,
                     IdUnit = x.Id,
                     Fertilizer = new Fertilizer
                     {
                         Id = s.FertilizerId,
                         Name = s.Fertilizer.Name,
                         Type = s.Fertilizer.Type,
                         UnitType = (UnitSoilType)s.Fertilizer.UnitType,
                     }
                 }).ToList(),
                 SoilProtections = x.SoilProtectors.Select(s => new AgroUnitSoilProtection
                 {
                     Id = s.Id,
                     IdSoilProtection = s.SoilProtectorId,
                     Amount = s.Amount,
                     AmountTotalHand = s.AmountTotalHand,
                     SaveTotalHand = s.AmountTotalHand != null,
                     StockName = s.Stock?.Name,
                     StockId = s.StockId,
                     IdUnit = x.Id,
                     SoilProtection = new Model.SoilProtection
                     {
                         Id = s.SoilProtectorId,
                         Name = s.SoilProtector.Name,
                         Type = s.SoilProtector.Type,
                         UnitType = (UnitSoilType)s.SoilProtector.UnitType,
                     }
                 }).ToList(),
             };

         if (result.IdMachine.HasValue && x.Machine != null)
         {
             result.Machine = new Machine
             {
                 Id = x.Machine.Id,
                 Type = (MachineType?)x.Machine.Model.MachineSubType?.Type ?? MachineType.Noname,
                 IdManufacturer = x.Machine.Model.Manufacturer.Id,
                 IdClient = x.Machine.ClientId,
                 Nomer = x.Machine.Number,
                 Manufacturer = new Model.Manufacturer
                 {
                     Id = x.Machine.Model.Manufacturer.Id,
                     ExternalId = x.Machine.Manufacturer.ExternalId,
                     IdClient = x.Machine.Manufacturer.ClientId,
                     Name = x.Machine.Manufacturer.Name,
                 },
                 IdModel = x.MachineModelId,
                 Model = new ModelTS
                 {
                     Id = x.Machine.Model.Id,
                     ExternalId = x.Machine.Model.ExternalId,
                     Name = x.Machine.Model.Name,
                     Type = (ModelType)(x.Machine.Model.TypeTechnics ?? 0),
                     MachineSubTypeId = x.Machine.Model.MachineSubTypeId,
                     Photo = x.Machine.Model.PhotoId,
                     FuelTypeId = x.Machine.Model.FuelTypeId,
                 },
                 TerminalType = (TerminalType)x.Machine.TerminalTypeId,
                 TerminalNumber = x.Machine.TerminalNumber,
                 MonitoringId = x.Machine.MonitoringId,
                 MonitoringHistoryStatus = (MonitoringHistoryStatuses)x.Machine.MonitoringHistoryStatus,
             };
         }

         if (result.IdUser.HasValue && x.User != null)
         {
             result.Executor = new User
             {
                 Id = x.User.Id,
                 Name = x.User.Name,
                 SurName = x.User.Surname,
                 MiddleName = x.User.MiddleName,
                 Birthday = x.User.Birthday,
                 DrivingLicenseNumber = x.User.DrivingLicenseNumber,
                 PersonnelNumber = x.User.PersonnelNumber,
             };
         }

             if (result.IdInstrument.HasValue && x.AgroInstrument != null)
             {
                 result.Instrument = new AgroInstrument
                 {
                     Id = x.AgroInstrument.Id,
                     Type = (MachineType?)x.AgroInstrument.Model.MachineSubType?.Type ?? MachineType.Noname,
                     IdManufacturer = x.AgroInstrument.Model.Manufacturer.Id,
                     IdClient = x.AgroInstrument.ClientId,
                     AggregateWidth = (double)x.AgroInstrument.Width,
                     LeverX = (double)x.AgroInstrument.LeverPointX,
                     LeverY = (double)x.AgroInstrument.LeverPointY,
                     LinkX = (double)x.AgroInstrument.LinkPointX,
                     LinkY = (double)x.AgroInstrument.LinkPointY,
                     Manufacturer = new Model.Manufacturer
                     {
                         Id = x.AgroInstrument.Model.Manufacturer.Id,
                         ExternalId = x.AgroInstrument.Manufacturer.ExternalId,
                         IdClient = x.AgroInstrument.Manufacturer.ClientId,
                         Name = x.AgroInstrument.Manufacturer.Name,
                     },
                     IdModel = x.AgroInstrument.ModelId,
                     Model = new ModelTS
                     {
                         Id = x.AgroInstrument.Model.Id,
                         ExternalId = x.AgroInstrument.Model.ExternalId,
                         Name = x.AgroInstrument.Model.Name,
                         Type = (ModelType)(x.AgroInstrument.Model.TypeTechnics ?? 0),
                         MachineSubTypeId = x.AgroInstrument.Model.MachineSubTypeId,
                         Photo = x.AgroInstrument.Model.PhotoId,
                     },
                     TerminalType = (TerminalType)x.AgroInstrument.TypeTerminal,
                     TerminalNumber = x.AgroInstrument.TerminalNumber,
                     MonitoringId = x.AgroInstrument.MonitoringId,
                 };
             }

             return result;
         })
         .ToArray();
     }
 }
Отредактировано 12.02.2024 9:48 undo75 . Предыдущая версия . Еще …
Отредактировано 12.02.2024 7:55 undo75 . Предыдущая версия .
Re: зацените код. прилетел инцедент
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 12.02.24 08:10
Оценка: 1 (1) +3 -1
Здравствуйте, undo75, Вы писали:

U>по таймауту у них падает.

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

U>кто это пропустил я хз...

Кроме пары сомнительных моментов ничего криминального нет. Лучше уж такой код, чем эквивалентные простыни SQL.
Re: зацените код. прилетел инцедент
От: Hоmunculus  
Дата: 12.02.24 08:14
Оценка: +1
Здравствуйте, undo75, Вы писали:

Блин, трындец. БАЗЫ ДАННЫХ!!! Люди, КАК это может быть интересно??! Единсивенный предмет в вузе который еле смог
Re[2]: зацените код. прилетел инцедент
От: undo75  
Дата: 12.02.24 08:14
Оценка:
G>Надо смотреть что за запрос генерируется, какие индексы используются и сколько данных тянет. Ну как обычно
тут думаю проблема будет решена сразу повышением селективности.

G>Кроме пары сомнительных моментов ничего криминального нет. Лучше уж такой код, чем эквивалентные простыни SQL.

не простыня это.
там делаешь обдумано. здесь влоб
Re[2]: зацените код. прилетел инцедент
От: undo75  
Дата: 12.02.24 08:16
Оценка:
H>Блин, трындец. БАЗЫ ДАННЫХ!!! Люди, КАК это может быть интересно??! Единсивенный предмет в вузе который еле смог

в день зарплаты. дальше неинтересно. разве как запущенность геморроя облегчить
Re[2]: зацените код. прилетел инцедент
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 12.02.24 08:52
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>Здравствуйте, undo75, Вы писали:


H>Блин, трындец. БАЗЫ ДАННЫХ!!! Люди, КАК это может быть интересно??! Единсивенный предмет в вузе который еле смог


Платят денег не за то, чтобы тебе было интересно. И есть люди, которые смогли.
Re[3]: зацените код. прилетел инцедент
От: Hоmunculus  
Дата: 12.02.24 08:55
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Платят денег не за то, чтобы тебе было интересно. И есть люди, которые смогли.


Ну, у меня то что неинтересно- в голову не влазит и быстро оттуда выветривается. Осилить-то я осилил, ничего там сложного нет. Но плакал. Поэтому всегда удивляли однокурсники, которые связались с Задницей Одина
Re[2]: зацените код. прилетел инцедент
От: rudzuk  
Дата: 12.02.24 09:19
Оценка: 1 (1) +1
Здравствуйте, Hоmunculus, Вы писали:

H> Блин, трындец. БАЗЫ ДАННЫХ!!! Люди, КАК это может быть интересно??! Единсивенный предмет в вузе который еле смог


Хоть у меня с БД никогда проблем небыло, но соглашусь: это самая унылая работа, просто концентрат уныния.
avalon/3.0.2
Re[3]: зацените код. прилетел инцедент
От: undo75  
Дата: 12.02.24 09:32
Оценка:
R>Хоть у меня с БД никогда проблем небыло, но соглашусь: это самая унылая работа, просто концентрат уныния.

программирование другим бывает?
Re[2]: зацените код. прилетел инцедент
От: fmiracle  
Дата: 12.02.24 09:33
Оценка: 1 (1) +1 :)))
Здравствуйте, Hоmunculus, Вы писали:

H>Блин, трындец. БАЗЫ ДАННЫХ!!! Люди, КАК это может быть интересно??! Единсивенный предмет в вузе который еле смог


ОООО, супер, БАЗЫ ДАННЫХ! Люди, ЧТО может быть БОЛЕЕ интересно?!? Единственный предмет в ВУЗе, который был реально клевый!


Re[3]: зацените код. прилетел инцедент
От: undo75  
Дата: 12.02.24 09:37
Оценка:
F>ОООО, супер, БАЗЫ ДАННЫХ! Люди, ЧТО может быть БОЛЕЕ интересно?!? Единственный предмет в ВУЗе, который был реально клевый!


а где их нет и что в этой теме интереснее? аи?
Re[3]: зацените код. прилетел инцедент
От: Hоmunculus  
Дата: 12.02.24 09:37
Оценка:
Здравствуйте, fmiracle, Вы писали:


Так в том и вопрос. Что именно?
Мне интересен визуал, графика и симуляции физики. Потому что это красиво, вау-эффектно и прочее. Сразу виден результат.
Мне НЕ интересно, но я могу понять в чем интерес, например, у безопасников и сетевиков.

Но я в упор не могу понять что может быть интересно в этих идиотских огромных таблицах
Re[4]: зацените код. прилетел инцедент
От: rudzuk  
Дата: 12.02.24 09:45
Оценка: 1 (1)
Здравствуйте, undo75, Вы писали:

u> R>Хоть у меня с БД никогда проблем небыло, но соглашусь: это самая унылая работа, просто концентрат уныния.


u> программирование другим бывает?


Конечно!
avalon/3.0.2
Re[4]: зацените код. прилетел инцедент
От: undo75  
Дата: 12.02.24 09:46
Оценка: -1
H>Но я в упор не могу понять что может быть интересно в этих идиотских огромных таблицах

в упор не могу понять вообще что в теме компов может быть интересно.
но ты сольешься и не ответишь как обычно. вопрос в воздух
Re[5]: зацените код. прилетел инцедент
От: undo75  
Дата: 12.02.24 09:53
Оценка:
R>Конечно!

и игрушки писал и станки программировал. та же хрень
и да. беспилотники тоже. на заре...
одинаково тошнило от всего. день зарплаты ключевое...
Отредактировано 12.02.2024 9:55 undo75 . Предыдущая версия . Еще …
Отредактировано 12.02.2024 9:54 undo75 . Предыдущая версия .
Re[4]: зацените код. прилетел инцедент
От: Sharov Россия  
Дата: 12.02.24 10:00
Оценка: +1
Здравствуйте, Hоmunculus, Вы писали:

H>Здравствуйте, fmiracle, Вы писали:



H>Так в том и вопрос. Что именно?

H>Мне интересен визуал, графика и симуляции физики. Потому что это красиво, вау-эффектно и прочее. Сразу виден результат.
H>Мне НЕ интересно, но я могу понять в чем интерес, например, у безопасников и сетевиков.

Согласен, графика очень интересна, там есть свой рокет саенс.

H>Но я в упор не могу понять что может быть интересно в этих идиотских огромных таблицах


Ну как бэ основа -- без бд ни банки, ни интернет сайты не работали бы. В сущности все нагруженные приложения, а это тоже очень интересно,
каким-то образом используют бд. Это может быть стандартные реляционные бд (acid) и их тюнинг, это могут быть eventual consistency nosql
бд и умение их использовать и настраивать. Т.е. миллионы людей ежедневно пользуются результатом твоего труда. И там куча нюансов
и при взаимодействии с железом, чтобы все это делалось эффективно. Т.е. по сути, бд -- это основа практически всех компьютерных программ,
за исключением, разве что, игр. Да и тот же steam без бд никуда. Опять же облака -- это масштабируемые бд, спец. хранилища типа s3 со
своими свойствами и т.п. Короче, все с чем люди каждодневно взаимодействует в интернете и на мобиле имеют свою бд, т.е. по сути
взаимодействие с бд + какая-то бизнес логика.

Так что бд не просто интересны, но еще и крайне важны. Без крутейшей графики прожить можно, а вот без онлайн банкинга или соц. сети уже не очень.
БД -- сердце 90%(если не больше) современных приложений.
Кодом людям нужно помогать!
Отредактировано 12.02.2024 10:01 Sharov . Предыдущая версия .
Re[2]: зацените код. прилетел инцедент
От: m2user  
Дата: 12.02.24 10:03
Оценка:
U>>кто это пропустил я хз...
G>Кроме пары сомнительных моментов ничего криминального нет. Лучше уж такой код, чем эквивалентные простыни SQL.

Но на SQL такой простыни не было бы. Тут большая часть кода это конвертации из Model
IdInstrument = x.AgroInstrumentId,

Если их вынести в отдельные методы, то сам код SQL запроса будет вполне читабельным.
Re[5]: зацените код. прилетел инцедент
От: Hоmunculus  
Дата: 12.02.24 10:07
Оценка:
Здравствуйте, undo75, Вы писали:

Нет. Не сольюсь. Потому что программист — творец. Он подобен Богу в этом цифровом мирке.
Ты садишься, перед тобой пустой лист, открытая IDE или какая-то среда. И нет НИЧЕГО. И только что-то в идеях и твоей голове. И ты из пустоты, САМ начинаешь создавать. То, у чего у людей может отвиснуть челюсть. То, что может внушить идею и вызвать эмоции. «В начале было слово» — это можно сказать и про нас. Мы — творцы галактик!!
Re[5]: зацените код. прилетел инцедент
От: rudzuk  
Дата: 12.02.24 10:17
Оценка:
Здравствуйте, Sharov, Вы писали:

S> Ну как бэ основа -- без бд ни банки, ни интернет сайты не работали бы. В сущности все нагруженные приложения, а это тоже очень интересно, каким-то образом используют бд.


Никто, вроде, не оспаривал полезность БД. Однако, они от этого не перестают быть унылыми (если только сам не разрабатываешь БД).
avalon/3.0.2
Re[6]: зацените код. прилетел инцедент
От: rudzuk  
Дата: 12.02.24 10:17
Оценка: +1 :)
Здравствуйте, undo75, Вы писали:

u> и игрушки писал и станки программировал. та же хрень

u> и да. беспилотники тоже. на заре...
u> одинаково тошнило от всего. день зарплаты ключевое...

Вебкам попробуй.
avalon/3.0.2
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.