Это копия, сохраненная 29 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Литература вторым постом
1. Ресурсы:
- https://docs.microsoft.com/ru-ru/dotnet/csharp/
- https://metanit.com/
- https://professorweb.ru
- https://www.tutorialspoint.com/csharp/
2. Онлайн-компиляторы:
- https://ideone.com/
- https://dotnetfiddle.net/
3. WinForms или WPF?
Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае WinForms, делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить?
Неправда. C# активно развивается, недавно вышел .NET 5 и С# 9.0. Дотнет стал полностью опенсорсным и кроссплатформенным. В некотором смысле понемногу вымирают десктопные приложения с развитием веб-технологий, но в том же энтерпрайзе он еще очень даже востребован.
5. Какую IDE выбрать?
Для Windows самым очевидным вариантом будет Visual Studio ( https://visualstudio.microsoft.com/ru/downloads/ ). Студия распространяется в двух редакциях: бесплатная коммьюнити-версия и платный энтерпрайз эдишн. В большинстве случае будет достаточно Community-версии: она поддерживает и C#, C++, VB.NET и F#, а так же имеет возможность установки дополнений.
Кроссплатформенный полуредактор/полуIDE VS Code ( https://code.visualstudio.com/ ).
Также существуют плагины для Atom'а и Sublime Text, но функциональность там достаточно сильно урезана.
Также можете взглянуть на кроссплатформенную IDE Rider.
6. С# для мобильной разработки
Если нужны инструменты для разработке под мобилы, смотри сюда - https://docs.microsoft.com/ru-ru/visualstudio/cross-platform/cross-platform-mobile-development-in-visual-studio?view=vs-2019.
Из актуальной литературы
- Xamarin Mobile Application Development
- Xamarin Essentials
7. Дополнительные инструменты для разработки на C#
LINQPad - сорт оф REPL, с возможностью быстрого подключения к БД и удобной визуализацией данных
dnSpy - декомпилятор, малоизвестный форк ILSpy, где реализована возможность модификации IL-кода прямо в EXE и DLL файлах, отладка IL-кода и много других фич для reverse engineering'а
dotPeek - бесплатный декомпилятор от JetBrains
scriptcs - для запуска C# кода как скриптов, возможность использовать как REPL
8. Расширения для студии
ReSharper - одно из известнейших. Рефакторинги, умный автокомплит, настраиваемый стиль кода. Платный, но можно стянуть с торрентов
Новые возможности C# 9.0: https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/
Текст шапки: https://pastebin.com/pbK8CGqw
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет.
- C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- Pro C# 8 with .NET Core 3 (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
11. Хочу еще хардкорней
- C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата.
- Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода.
- .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам
12. Литература по WPF
Из более-менее актуального можно выделить пару книг:
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
13. Литература по ASP.NET
- Pro ASP.NET Core 3 (Adam Freeman)
- Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
- Beginning ASP.NET for Visual Studio 2015 (William Penberthy)
14. Литература по асинхронности, параллелизму и всему такому
- Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции
- Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная
- Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg
15. Литература не по шарпу, но так или иначе связанная с языком
C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity
Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
16. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"
17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
- Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick
- Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун
- Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках
- Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы
- Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST
- Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID
18. Я не умею читать, что посмотреть?
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://goo.gl/meyyxO
- Коллекция видеоуроков, по всему дотнетовскому и смежным темам (250 часов, на русском) - https://nnm-club.me/forum/viewtopic.php?t=891636
- Набор курсов по C# от O'Reilly Media (28 часов, на английском) - http://rutracker.org/forum/viewtopic.php?t=5082978
- Канал по C# IAmTimCorey (на английском) - https://www.youtube.com/user/IAmTimCorey
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет.
- C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- Pro C# 8 with .NET Core 3 (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
11. Хочу еще хардкорней
- C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата.
- Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода.
- .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам
12. Литература по WPF
Из более-менее актуального можно выделить пару книг:
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
13. Литература по ASP.NET
- Pro ASP.NET Core 3 (Adam Freeman)
- Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
- Beginning ASP.NET for Visual Studio 2015 (William Penberthy)
14. Литература по асинхронности, параллелизму и всему такому
- Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции
- Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная
- Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg
15. Литература не по шарпу, но так или иначе связанная с языком
C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity
Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
16. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"
17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
- Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick
- Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун
- Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках
- Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы
- Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST
- Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID
18. Я не умею читать, что посмотреть?
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://goo.gl/meyyxO
- Коллекция видеоуроков, по всему дотнетовскому и смежным темам (250 часов, на русском) - https://nnm-club.me/forum/viewtopic.php?t=891636
- Набор курсов по C# от O'Reilly Media (28 часов, на английском) - http://rutracker.org/forum/viewtopic.php?t=5082978
- Канал по C# IAmTimCorey (на английском) - https://www.youtube.com/user/IAmTimCorey
Консолька
dotnet new console -o myApp
cd myApp
dotnet run
Веб проект
dotnet new webApp -o myWebApp --no-https
cd myWebApp
dotnet run
http://localhost:5000
Работает и на винде и на маке и на линухе.
Для Докера
Dockerfile
FROM mcr.microsoft.com/dotnet/sdk
WORKDIR /app
RUN dotnet new webApp --no-https
ENTRYPOINT ["dotnet", "run"]
Потом делаешь
docker build . -t my-app:latest
docker run -p 5000:5000 --name my-app my-app
class HotPotato<T>
Я таки тоже начал новую шапку пилить с новыми ссылками, но ОП оказался быстрее. Надо к лого добавить их новый маскот, а то у других языков в тредах есть, а у нас нет. И официальных ссылок накидать:
https://dotnet.microsoft.com/learn
https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/intro
И ссылку на их новое видео, где они всё по полочкам вокруг дотнета раскладывают:
https://www.youtube.com/watch?v=bEfBfBQq7EE
В общем, что думаете?
Зачем придумал? Ну, типа я столкнулся с тем что со всей этой DI дрисней довольно сложно использовать события обычные. Идея в чем: делаем синглтоны INotifier'ов, затем Scoped и Transient объекты получают этого INotifier в конструкторе, делают свои штуки грязные, и когда надо - пингуют методом Notify, те кому это надо - слушают и что-то там делают. Они(слушатели), так же получают этот INotifier в конструкторе, подписываются, в деструкторе - отписываемся.
Какие подводные камни? Вообще, я не придумал опять велосипед? А то я это, книг не читаю, только справку по языку на сайте МС читал. Ну и меня очень огорчало что с событиями в современных реалиях очень грустно, а мне так нравились события. Вот, посидев, подумав, придумал такое вот решение. Может быть есть что-то лучше?
https://pastebin.com/7k7w8Ujd
Public pub = new Public();
//добываю тип
Type hiddenType = typeof(Public).GetNestedType("Nested", BindingFlags.Instance | BindingFlags.NonPublic);
//добываю метод
MethodInfo hiddenMethod = hiddenType.GetMethod("GetMe", BindingFlags.Instance | BindingFlags.NonPublic);
//но как добытое поле привести
object hiddenFiled = typeof(MPCharCtrl).GetField("nestedInstance", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(pub);
//инвокаю
hiddenMethod.Invoke(hiddenFiled, null);
Вот так решил проблему, есть ли более лаконичный вариант?
Прикольно. Только хз подходит ли оно мне.
Ну, просто, допустим вот такой вот сценарий. У меня есть апи-контроллер. На этапе разработки я хочу логгировать всякие обращения в этом контроллере, но после того как закончится разработка - это уже не надо будет, а нужно будет что-то другое, например, трафик по разным API чтобы знать где у нас больше всего обращений, чтобы как-то в будущем оптимизировать это все. Так вот, я не хочу передавать логгер напрямую в какой-то контроллер и штуку для подсчета трафика, я бы хотел просто их написать, и чтобы они своими делами сами занимались когда в контроллере происходит событие. В примере я не понимаю как это будет происходить, может быть я просто тупой. В моем решении - лично мне - все понятно, я сделал нужный мне INotifier, сделал слушателей, передаю в контроллер инстанс этого INotifier'а, он пингует, слушатели тоже получают инстанс и делают свои штуки когда получат уведомление.
>что со всей этой DI дрисней довольно сложно использовать события обычные.
не совсем верно. Просто внедрив DI jни используются точно так же. Ведь в базисе IoC просто автофабрика
Либо обычные события, либо всякие *Listener/Subsciber/Receiver<T> и Subscribe(this)
Разница в том, что все, на что нужно подписаться, теперь должно быть по хорошему просунуто в конструктор, а не мы сами за ними ходим. Но и это не проблема, ведь IoC все это сам прокинет за нас.
Но некоторыми считается, что плохо подписываться в конструкторе и отписываться в диспозере.
таймкод
https://www.youtube.com/watch?v=ZzmK7K2ZIxI&feature=youtu.be&t=275
И если ты считаешь так же, то тогда обычные события и будут доставлять проблем. И вынудят использовать Listener/Subsciber/Receiver<T> (если сам их еще не ввел учитывая побочки обычных событий даже без DI)
но альтернатива "если не мы подписываемся, то кто-то за нас". А кто??? Например IoC
таймкод:
https://www.youtube.com/watch?v=ZzmK7K2ZIxI&feature=youtu.be&t=2178
Но это решит только момент "подписываемся в конструкторе и отписываемся в диспозере" (не вижу чтобы это решало "нужно подписаться отписаться много раз за время жизни компонента). К тому же раз мы не можем отписаться в диспозере, то тот, кто нас подписал, обязан знать наше время жизни чтобы отписать. А это не вкрутить, если не использовать концепцию lifetime (скоупы в IoC, либо явные lifetime)
Аноны, кому нехуй делать - въебеньте
RSABigInteger: https://github.com/username1565/BigInteger.js/commit/2b2057db04a32996247f2d1182511b6f2fe82395
куда-нить сюда:
https://github.com/bazzilic/BigInteger/blob/master/BigInteger/BigInteger.cs
А то RSACryptoServiceProvider не позволяет подписывать
данные произвольной длины, приватным ключём,
а здесь, двумя функциями, и подписывать и шифровать можно, байтовые массивы,
причём как приватными так и публичными ключами.
Ну и пофиксить бы, и оптимизировать весь этот код,
а то пиздец как распидарасило на кучу строку, что я аж сам хуею.
Аноны, переговорил с босом на работе, и решил таки перекатываться на MVC (на мой страх и риск), И ТУТ я сразу же словил маслину в задницу, при попытке юзнать создание вида посредством автогенерации (addView) получаю пикрил, я вообще не понимаю чего оно хочет, проект абсолютно пустой и дефолтный за одним исключением, в работе мы используем devexpress, собственно есть подозрения на него, но я не знаю как это фиксить,
>>871154
https://supportcenter.devexpress.com/ticket/details/t679373/when-adding-view-already-exists-error
Этот пост самое близкое что мне удалось найти по этой теме, но я не понял как он это решил, я не нашел никакого Web Development Tools про который он мог говорить
В Visual Studio Installer "ASP.NET и разработка веб-приложений" добавлена?
мне кажеться если бы у него не было этого элемента он бы тупо не мог создать проект мвс в котором у него вылезла эта ошибка, имхо
> я вообще не понимаю чего оно хочет
> проект абсолютно пустой и дефолтный
Ну так по указанному пути точно файлов нет? А если проверю?
есть собственно тот самый контроллер на который он ругается, вся соль в том что когда создаешь представление разве создается новый контролер с таким же названием? это же бред
Есть еще одна странность, тот чувак писал что теперь работает обычное представление и представление с devExpress, у меня же есть только одно, с devExpress
Во-первых, дотнет за тебя всю эту инфу собирает по дефолту. Ты можешь подключить какой-нибудь Serilog и отправлять и логи и производительность во всякие лого агрегаторы, типа Kibana, Grafana, Azure App Insights, New Relic, миллионы их. Там тебе будут твои логи красиво групповать, выдавать отчёт по производительности и ошибках.
Во-вторых, уж очень твой юзкейс подходит под эту тулзу: https://github.com/jbogard/MediatR/wiki
У него есть IRequest и INotification.
Никаких зависимостей, кроме самого медиатра (это вообще паттерн такой) в твоих контроллерах, а дальше твой DI решит в какой конкретно Handler твой запрос отправить. Тот Handler уже будет иметь логер, репо, сервисы и прочее.
ты понимаешь что я вызываю генератор кода в самом контролере, без контролерра я не могу вызвать генератор кода для этого контроллера!
Значит ты где-то неправильно настроил конфиг и он пихает выходные файлы под себя. Ищи конфиг. Насколько я помню девэкспресс, у них главная фишка - гибкая настройка в инспекторе без единой строчки кода.
Если ты знаешь ведЕкспрес скажи тогда вот что, почему в демо проекте присутствуют ошибки но не смотря на это он запускается и работает? это что за магия?
Да сразу весь шиндовс, чет там уже, +- 30 гигов тогда уже разницы не сыграют, вот сидел себе на вебФормах и все работало.
А если серьезно тогда я боюсь как бы мне реально не пришлось после такого ребута всю систему сносить
>вы упоротые. это папка в папке солюшена.
Ага,
А ничего что девЕкспрес установлен не на cистемный раздел? Это может быть вызвано таким расположением? девЕкспрес Зависим от локации?
да плевать кто куда установлен. основные проблемы из за расинхрона кода и содержимого кешей и тому подобного.
Ну потому что ребут с удалением временных файлов был сделан в первую очередь, я даже на всякий пеку перезагружал, мало ли
9 вакансий на ждуна, так еще и конкурировать с вышкоблядями за миску риса на легаси, ну пиздец. И это в дс. Пока два отказа, ожидаю что с остальными откликами...
мимо вкатун из техподдержки
ну мне обычно хватает только удаления .vs
остальные кеши у меня на рамдиске и не переживают ребуты.
один раз пришлось переставить студию
2 раза решарпер
где именно стоит студия и другой софт - никогда значения не имело.
Я не знаю. Зачем платный девэкспресс, когда есть бесплатная Авалония! Авалония! Скачай Авалонию! Юзай MVVM!
у него ж въеб проект
.net core же работает на Windows server правда? ну он ведь кроссплатформенный, было бы глупо если бы не работал... просто у меня даже их демо не работают, .net framework работает ок, а вот кор нет...
НЕТ, честно взят трайал с последующей покупкой в перспективе, взят отсюда
https://www.devexpress.com/Products/Try/
Когда мне дадут нормальный уже не будет времени разбираться поэтому пытаюсь сейчас в свободное время
А мы и не доходили, то что я смотрю это демо девекспреса, раньше я на вебформах сидел, мне на дваче объяснили что я не прав и я таки попросился в кор, мне сказали что знаний по кору у меня нихрена поэтому буду пока с вебекспресом работать, а он не работает нихрнеа, фремворк работает а кор нет
кстати не все демки кора не работают, некоторые работают, а тот который мне надо нет, собственно пикрил
Ну, например, оч удобный метод расширения для хоста для "засеевания" базы и миграции, инизиализации всяких синглтонов, либо проверка строки на пустоту, ну и всякие Guard'ы, чтобы можно было валидацию удобно провести.
Ну, я из проекта в проект папочку ношу.
И тут я задумался. А вдруг я хуйню делаю? Ну, типа вот есть несколько проектов, в одном эта папочка, а перенес в другой проект, в этой папочке добавилось пару новых методов. Перенес в третий там тоже добавилось. Может быть стоило бы это все таки в библиотеку оформить? А то нужно будет вернуться в старый проект, я опять эту папочку потащу. С другой стороны это полностью утилитарная библиотека, там нет классов, нет ООП, все методы это либо расширения, либо статические. С третий, если оформлять как библиотеку, то тут уже нужно будет более ответственно подходить, не менять внутренности под конкретные нужды, чтобы не поломать то что использует библиотеку.
Как вариант: Оформи нугет-пакет, опубликуй и подтягивай в свои проекты. Когда добавляешь новую утилиту - обновляешь пакет на сервере.
локальные нюгет либы тоже никто не отменял
А при чем здесь неткор и ос? Или ты даже не в состоянии понять сообщения об ошибке и исправить причину?
Какая ошибка болезненный, это демо девекса, я пробовал на другой пеке все работает, собственно задал закономерный вопрос, может ли влиять ось
>какая ошибка
>Exception Exception
Ясно. Пиши в саппорт девекса. Самое смешное, что ошибка в SampleData, т. е. в данных которые там в качестве примера, но вместо того чтобы посмотреть в код, долбоеб бежит на двач со своими умозаключениями про ОС.
Чел, ты понимаешь что SampleData они тоже сами представляют, оно должно работать с коробки, оно везде работает кроме сервера, разве мой вопрос о совместимости оси не закономерный в таком случае? или ты на полном серьезе хочешь что бы я полез дебажить и править демо пример?
Ну и да, если ты читал предыдущие посты я писал что я этот же проект с ЭТИМИ ЖЕ ДАННИМИ запускал на фремворке, и там проблем не было, то есть проблема именно в кор версии проекта, что я и спросил, а ты рассказываешь мне что я там что-то дебажить в данных должен
Нахуя нужен core? Есть одно несложное wpf приложение, нужно "портнуть" на asp.net сайт. Я думал что core нужен для кроссплатформености, а мне как раз нужно было бы захостить на линуксе asp.net сайт, но зашел только что и почитал что на апаче есть мод - mono по типу шиндосовского iis, который позволяет захостить проект.
Какие подводные и в чем лучше core?
>Нахуя нужен core?
Для кроссплатформенности.
>в чем лучше core?
Лучше тем что это полноценное решение, а не какой-то модуль на развитие которого большинству просто похуй. Я написал бэкенд на коре, фронтент на ангуляре, в пару кликов захостил всё на линуксе. Не понятно зачем мне искать какие-то модули и костыли.
>Какие подводные
Не знаю, но беглый взгляд по описанию этого mono нашел на это:
>Under high load, mono process consumes a lot of memory, website stops responding
>These symptoms have been reported, but their underlying causes are not known. Set the MonoAutoRestartMode, MonoAutoRestartRequests, MonoMaxActiveRequests, and MonoMaxWaitingRequests directives as described earlier to limit the lifetime of the mono process and to restrict the concurrency happening in the server.
К тому же стоит упомянуть что Core производительней.
Со времён фреймворка куча системных АПИ поменялась. Один и тот же пример не сможет запустится и там и там без изменений. Если ты скачал пример конкретно под какую-то из версий кора, и пример у них под эту конкретную версию кора, и у тебя эта версия установлена, то у них в примере тогда ошибка и скорее всего во входных данных.
ОС и дотнет тут вообще не причём. Обращайся в девэкспресс или как их там вообще хз чё это такое
По поводу версии кора, у примера версия 2.1, у другого примера которій работает 2.1, на компе где примеры работают 2.1, и на сервере где нужный мне пример не работает тоже 2.1, почему я думаю что ось ТЕОРЕТИЧЕСКИ может быть причем потому что ошибка типизации, а значит например на оси может использовать другая культура даты, локализация, все это зависит от оси, я правда вот что скажу, один и тот же проект на разных машинах имеет разные хеши, я думаю это не должно так быть
Ну опять всё упирается в этот девэкспресс. У них там какой-то метод с датой, в котором они вполне могли не учесть всякие локализации с форматом даты/времени.
> девэкспресс
Что за пунктик на этом девэкспрессе? Насяльнике деньги некуда девать? Пусть он лучше тебе премией их выдаст, а ты сваргань приложуху на авалонии.
Ну так ясно что не в гугл, но вот чем именно вызвана ошибка я это пытался узнать, я тут все таки сравнил исходники и вот что получил, и я просто не понимаю почему данные отличаются в двух одинаковых демках, причем вписаны они нативно, тоесть не культура дат тут виновата, а то что нативно вписано не правильные даты, я просто без понятий
В том что можно нанимать программистов более дешевого класса и один раз заплатил за девексперсс ты экономишь на зарплате программистам, хотя кстати я говорил шефу что да хуй с ним с этим девекспресом я перекачусь на мвс без него, мне ответили что это уже вопрос поддержки ранее сделанных проектов
> можно нанимать программистов более дешевого класса
Маркетинговая лапша девекспресса. Поздравь своего насяльнику от меня - он на эту лапшу купился.
А что? ты думаешь нельзя? что бы юзать девекс даже программистом не надо быть, копипаст и презентуешь насальнику с важным видом, хочет девекс пускай будет девекс, я найду куда свободное время потратить
Я создаю приложение, которое работает в фоне, выкидывает иконку в трей, из контекстного меню иконки можно показать форму настроек.
1) По инициализации приложения. Есть класс формы, есть класс трея. Сначала я создаю трей, потом создаю окно. Прописываю в событие завершения приложения анонимную функцию, которая прячет трей-иконку. Пробрасываю ссылку на форму в трей (для манипулирования ею из трея). Запускаю майнлуп методом Run приложения. Всё верно делаю?
2) По знаменитому функционалу "сворачивание в трей" возник головняк. Ссылка на форму пробрасывается в трей-объект как Form, то есть, нет никаких дополнительных свойств, которые я нахуевертил. А нахуевертил я свойства bool CanHideInTray, bool CanClose, первое говорит окну, может ли оно вместо минимизации просто исчезнуть, второе говорит ему же, может ли оно при нажатии на крестик минимизироваться, а не закрыться. В сочетании с первым второе работает на исчезновение вместо закрытия. Я бы мог пробросить сабкласс MyConfigForm в инстанс трея, но я планирую несколько формочек, которые будут динамически меняться по ходу развития ситуации, пробрасываться к трей-объекту и он уже действующей формочкой будет манипулировать. Поэтому я сделал интерфейс ITrayedForm, в котором описал все нужные мне флаги, которых я напихал в форму. Затем я прописал форме, что она реализует этот интерфейс. После чего, в трей-объекте я создал два ридонли свойства, первое типа Form, которое отдаёт прилинкованную форму, если есть, второе интерфейса ITrayedForm, которое проверяет, прилинкована ли форма вообще, затем смотрит, форма is TrayedForm и если да, возвращает имеющийся инстанс, скастованный на этот интерфейс. Так вот, потом в коде мне приходится работать с двумя переменными, в первой свойства формы, во второй свойства велосипедного интерфейса. Правильно ли я делаю? Нет ли способа проще?
И что вам дал этот дутнет 5? Я хайпа вокруг него не заметил, чего ждали непонятно.
Как что? Как это что?
Мы любим всё новое. Обновления венды накатываем в день релиза. Вот у тебя какой апдейт десятки 20Н2 я надеюсь?
>Мы любим всё новое.
Двачую. Новая циферка (на этот раз даже больше чем у .net framework), более лаконичное название (без кора) — уже классно.
Ну, я хз за бест практис, но я бы делал так: 1 основное приложение - виндовый сервис. 2 ui - обычная форма, из нее при выходе шлёшь сервису сообщение, например, о выключении, ждёшь пока состояние сменится на stopped и закрываешь формочку. Ну и настройки всякие, перезапускаешь сервис и все такое.
Подумаю над этим. Спасибо! А иконка в трее к кому должна относиться, сервису или приложению?
У меня есть очередь, в которой лежат Func<CancellationToken, Task>. Есть семафорчик, есть работники, они когда в очереди что-то появляется - тащат оттудова. Такой велосипед я придумал чтобы ограничить число одновременных задач, чтобы сервер если куча запросов которые долго выполняются, был доступен для быстрых обращений. Так вот, я боюсь что в реальных условиях всплыват какие-то подводные камни. Потому предложите способ лучше.
Суть самого приложения - мониторинг состояния устройств, клиент может отослать запрос на чтение, устройство может ответить, а может и не ответить, потому там есть таймаут на отсет, который казывает клиент. Ну, чтобы в случае если куча клиентов разом читать ломанется, я это фигнию и придумал, потому что даже с стандартной асинхронностью, в случае если на пеке обычной запустить 10 клиентов и послать запрос на чтение всех параметров устройств(а их, в среднем, у устройств в районе 10к), все начинало тормозить, клиент не мог к апишке обратиться и вообще. Как нормальные люди это решают-то?
А нет никакой разницы между вариантами
1 у тебя список фанков и ты следишь за тем, чтобы не больше лимита работнички брали
и
2 у тебя нет никаких фанков, но есть семафор и все делают все что им надо, но семафор залимитирует то, что нужно лимитировать - по факту та же очередь, только неявная + семафор
Короче, сам впилил, вроде робит, но пиздец там говна, в коде: https://github.com/username1565/BigInteger.cs/commit/9a48f46c53c1e307c2d5441c5ba451e86349611a
Ну, просто тут в чем проблема. Количество возможных одновременных работ остается либо за мной(я ебану константу), либо за тем кто настраивать сервер будет(я вынес настройку в конфигурацию, одмен может поменять число). Оба варианта мне кажутся говном в этом плане, типа блин, если клиентов не так много, то можно было бы и пожрать больше ресурсов, а если много - пусть задачи на чтение подождут, таки основная цель - смотреть что уже есть, а почитать большую часть параметров можно и в 2 часа ночи, когда нагрузка поменьше должна быть.
Вот и я думал, может быть есть какие-то более правильные способы это все делать. Конечно, я могу изъебнуться и свою хреновину для анализа запилить, которая будет в реальном времени ограничивать число работников, а когда ресурсы появляются - создавать новых, но это выйдет долго и сложно, да и не уверен что затраты по времени стоят того чтобы неделю-две ебаться с этим.
да какая разница сколько клиентов. Они упрутся в ограничения тред-пула (которые для I/O), что несомненно много или ты им дашь синхронизацию в которую они упрутся - TaskScheduler (на любителя) или семафор. Не хочешь делить семафор между всеми - пусть они не тащат из твоего "оттудова", а, наоборот, кладут туда свои фанки, чтобы они выполнялись лимитировано
и вот там можешь измерять фазы луны (ну а что еще) и на лету менять лимиты.
Зачем тебе семафорчик? Делай все задачи асинхронными, CLR сама распределит ресурсы по мере необходимости. Те которые будут выполнятся долго запускай с опцией TaskCreationOptions.LongRunning.
Пасиб, оч приятно. :3 Рили, я долго с этим пердолился.
>>873102
Изначально, у меня, стоял вопрос в том, как бы - зашифровать трафик в локальной сети,
при передаче JSON-постов наноборды, от сервера к клиенту, и на клиенте дешифровать его.
Потому что, даже в локальной сети, могут быть натыканы снифферы, жучки, и анальные зонды всякие,
а JSON, он же, открытым текстом - он прёт по HTTP.
Поэтому, я создал тред о полуанонимной аутентификации, здесь: https://arhivach.net/thread/628790/
и сам же, пришёл к вот такой вот схеме: https://arhivach.net/thread/628790/#1839162
Где юзается RSA.
Поскольку RSА, подразумевает не только шифрование-дешифрование, но и подпись данных, с проверкой пописи,
с учётом того, что операции эти эквивалентны (возведение в степень по модулю, но с разными ключами),
и поскольку среди этих методов: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsacryptoserviceprovider
я не нашёл ни одного, который позволял бы шифровать данные (не их хэш), приватным ключём, и дешифровать публичным,
поэтому я и решил запилить это. И на ".js" (клиентская сторона), и на ".cs" (серверная сторона).
А ещё, до этого, вот сюда подумывал всунуть это: https://github.com/username1565/rsaVault/issues/3
Потому что там тоже подпись не пашет нихуя, только шифрование публичным, и дешифрование приватным ключем. Это нихуя не рса.
>я не нашёл ни одного, который позволял бы шифровать данные
> приватным ключём, и дешифровать публичным,
Вот тут уже стоило задуматься.
>поэтому я и решил запилить это
А вот тут понять что ты совершаешь ошибку!
Причина почему этого не существует потому что это бессмысленная операция.
С тем же успехом ты можешь шифровать симметрией, даже лучше будет.
Темам криптографии уже десятки лет и там уже все предумано передумано, если ты гений математики (а ты явно не он), то сделать в этой сфере что-либо новое ты уже не сможеьш, поэтому просто берешь и используешь готовое, а не выдумываешь свой велосипед, потому что если его нет, то скорее всего (99.999999999999999%) он невозможен или тупой и никому не нужен.
Тащемта, всё гораздо проще...
RSA-операция по подписи данных, приватным ключём, эквивалентна шифрованию данных приватным ключем, сообщения, внутрь подписи.
Проверка подписи, эквивалентна дешифрованию сообщения, но ключем публичным, извнутри подписи, с последующим сравнением сообщений.
Да, это туповатая операция, потому и не испльзуется, ведь байтовая длина подписи равна длине сообщения, поэтому используется хэш от сообщения - он короче. Однако хэш имеет коллизии, и ваша подпись не подпись. А тут таки-подпись.
Такие дела.
Короче, не знаю, что думаете обо всех этих Fluent Interface'ах?
Думаю, что ты параноик, а LINQ - хуйня. Почему хуйня? Работает пиздец как медленно, аж в х10 раз, чем старым дедовским способом. Не защищает от долбоебов как ты, которые вместо передачи лямбды в FirstOrDefault, хуевертят Where, а потом пустой FirstOrDefault.
>эквивалентна
Нет. Иначе бы результат операции для одинаковых входных данных всегда был бы одинаковым.
А подпись данных дает различный результат от раза к разу, хотя результат не уникальный, а закономерный, просто не единичный.
То есть 2 разных строки могут быть подписью одних и тех же данных.
А шифрование публичным и дешифровка приватным не используется по причине того что операция небезопасна, если ты кому-то дал приватный ключ, то сообщение сможет расшифровать любой, хоть и не сразу, но это операция становится возможной.
Именно по этой причине существует лишь одна модель безопасной передачи данных. Это передача ключей любого симметричного шифрования с помощью ассиметричного, можно конечно и RSA общаться, но глупо, так как медленно и опять же смысла 0 так как в конечном итоге все хранится на машине пользователя и в обоих случаях доступ к ключу есть только на машинах пользователей.
>>эквивалентна
>Нет. Иначе бы результат операции для одинаковых входных данных всегда был бы одинаковым.
Так он и есть одинаковый, этот результат (подпись),
если данные подписывать именно так, как описано здесь: https://ru.wikipedia.org/wiki/RSA#Цифровая_подпись
>s = m^d mod n; где m - подписываемое сообщение, d - секретная экспонента, n - модуль, s - подпись, (d, n) - приватный ключ.
Но битовая длина сообщения s получается, порядка битовой длины сообщения m, к тому же и m надо передать в паре (m, s),
а это уже - две битовых длины m. Поэтому, оно и непрактично, как-бы, и проще подписать hash(m), а не m.
>А подпись данных дает различный результат от раза к разу,
>хотя результат не уникальный, а закономерный, просто не единичный.
Тут, я, не совсем понял, что ты хотел сказать. Если менять хэш-функцию, или добавлять какую-то nonce к данным, то да, подпись меняется. А если данные статичные и не меняются, то с чего бы значению подписи изменяться?
>То есть 2 разных строки могут быть подписью одних и тех же данных.
Да, возможно, если подписывать разными ключами, криптоэквивалентными ключу d.
О таких ключах, расписано здесь: https://ru.wikipedia.org/wiki/RSA#Алгоритм_создания_открытого_и_секретного_ключей
Поэтому алгоритм генерации ключей, я, реализовал через функцию Кармайкла(лямбда), а не через функцию Эйлера (фи).
Также, об этом, сказано и здесь: https://en.wikipedia.org/wiki/RSA_(cryptosystem)#OriginalWithPhiN
>А шифрование публичным и дешифровка приватным не используется
Оно используется, и по дефолту, енкриптит - пабом, а декриптит - привом.
А вот наоборот - нельзя сделать, заенкриптить привом, и декриптнуть - пабом.
>А шифрование публичным и дешифровка приватным не используется
>по причине того что операция небезопасна, если ты кому-то дал приватный ключ
>то сообщение сможет расшифровать любой
Нахуя кому-то дать приватный ключ, если это - ПРИВАТНЫЙ, блять, ключ?
>хоть и не сразу, но это операция становится возможной.
Может ты имел в виду публичный ключ, а не приватный?
Ну да, декрипт возможен, в долгосрочной перспективе, если факторизовать n, на два простых,
что сводится к довольно сложной - задаче дискретного логарифмирования в кольце вычетов по простому модулю:
https://ru.wikipedia.org/wiki/Дискретное_логарифмирование#В_кольце_вычетов_по_простому_модулю
>Именно по этой причине существует лишь одна модель безопасной передачи данных.
>Это передача ключей любого симметричного шифрования с помощью ассиметричного
MITM-атакер - может подменить ключи, сначала асимметричные, и как следствие и симметричные.
>можно конечно и RSA общаться, но глупо, так как медленно
Именно. Для этого и вхуярены - CRT-методы.
Опционально, при генерации ключей, можно сравнивать e и d,
и выдавать более короткий e и более длинный d,
так как от битовой длины их, зависит скорость операций шифрования-дешифрования.
Если d более короткое, и его можно акселлерировать с помощью CRT,
то шифрование-дешифрование с длинным e будет требовать больше времени.
>и опять же смысла 0
>так как в конечном итоге
>все хранится на машине пользователя
>и в обоих случаях доступ к ключу есть только на машинах пользователей.
Тут не очень понятно, что ты хотел сказать.
Смотри, короче.
Есть сервер, он стоит на машине пользователя,
там хранится только приватник и данные, скажем - база постов наноборды.
Паб, этот сервер - он отдаёт в паблик, расшаривает, этот паб - прешаренный (pre-shared).
Рандомный клиент, желающий подключиться к серверу, анонимно,
зная pub-сервера, генерирует пару своих ключей,
затем - обмениваются по той схеме общим ключём симметричного шифрования, и гонят в обе стороны - шифр.
Снифферы - сосут, митмщики - сосут.
>>эквивалентна
>Нет. Иначе бы результат операции для одинаковых входных данных всегда был бы одинаковым.
Так он и есть одинаковый, этот результат (подпись),
если данные подписывать именно так, как описано здесь: https://ru.wikipedia.org/wiki/RSA#Цифровая_подпись
>s = m^d mod n; где m - подписываемое сообщение, d - секретная экспонента, n - модуль, s - подпись, (d, n) - приватный ключ.
Но битовая длина сообщения s получается, порядка битовой длины сообщения m, к тому же и m надо передать в паре (m, s),
а это уже - две битовых длины m. Поэтому, оно и непрактично, как-бы, и проще подписать hash(m), а не m.
>А подпись данных дает различный результат от раза к разу,
>хотя результат не уникальный, а закономерный, просто не единичный.
Тут, я, не совсем понял, что ты хотел сказать. Если менять хэш-функцию, или добавлять какую-то nonce к данным, то да, подпись меняется. А если данные статичные и не меняются, то с чего бы значению подписи изменяться?
>То есть 2 разных строки могут быть подписью одних и тех же данных.
Да, возможно, если подписывать разными ключами, криптоэквивалентными ключу d.
О таких ключах, расписано здесь: https://ru.wikipedia.org/wiki/RSA#Алгоритм_создания_открытого_и_секретного_ключей
Поэтому алгоритм генерации ключей, я, реализовал через функцию Кармайкла(лямбда), а не через функцию Эйлера (фи).
Также, об этом, сказано и здесь: https://en.wikipedia.org/wiki/RSA_(cryptosystem)#OriginalWithPhiN
>А шифрование публичным и дешифровка приватным не используется
Оно используется, и по дефолту, енкриптит - пабом, а декриптит - привом.
А вот наоборот - нельзя сделать, заенкриптить привом, и декриптнуть - пабом.
>А шифрование публичным и дешифровка приватным не используется
>по причине того что операция небезопасна, если ты кому-то дал приватный ключ
>то сообщение сможет расшифровать любой
Нахуя кому-то дать приватный ключ, если это - ПРИВАТНЫЙ, блять, ключ?
>хоть и не сразу, но это операция становится возможной.
Может ты имел в виду публичный ключ, а не приватный?
Ну да, декрипт возможен, в долгосрочной перспективе, если факторизовать n, на два простых,
что сводится к довольно сложной - задаче дискретного логарифмирования в кольце вычетов по простому модулю:
https://ru.wikipedia.org/wiki/Дискретное_логарифмирование#В_кольце_вычетов_по_простому_модулю
>Именно по этой причине существует лишь одна модель безопасной передачи данных.
>Это передача ключей любого симметричного шифрования с помощью ассиметричного
MITM-атакер - может подменить ключи, сначала асимметричные, и как следствие и симметричные.
>можно конечно и RSA общаться, но глупо, так как медленно
Именно. Для этого и вхуярены - CRT-методы.
Опционально, при генерации ключей, можно сравнивать e и d,
и выдавать более короткий e и более длинный d,
так как от битовой длины их, зависит скорость операций шифрования-дешифрования.
Если d более короткое, и его можно акселлерировать с помощью CRT,
то шифрование-дешифрование с длинным e будет требовать больше времени.
>и опять же смысла 0
>так как в конечном итоге
>все хранится на машине пользователя
>и в обоих случаях доступ к ключу есть только на машинах пользователей.
Тут не очень понятно, что ты хотел сказать.
Смотри, короче.
Есть сервер, он стоит на машине пользователя,
там хранится только приватник и данные, скажем - база постов наноборды.
Паб, этот сервер - он отдаёт в паблик, расшаривает, этот паб - прешаренный (pre-shared).
Рандомный клиент, желающий подключиться к серверу, анонимно,
зная pub-сервера, генерирует пару своих ключей,
затем - обмениваются по той схеме общим ключём симметричного шифрования, и гонят в обе стороны - шифр.
Снифферы - сосут, митмщики - сосут.
Не смотрите на то что коде делает, это просто пример.
В общем, можно ли как-то в студии настроить так, чтобы студия автоматически как в варианте с 'a' форматировала?
Просто по дефолту она как b делает, а если я хочу как a - вторую строчку каждый раз вручную приходится пододвигать, дальше уже нормально.
Ну и еще вопрос, как блин сделать чтобы intellisense только если я какую-то клавишу жмакну работал, например tab. Очень странно просто эта фигня себя ведет в лямбдах, я пишу "(x" а он мне каждый раз какую-то хрень вставляет, каждый раз я вынужден это добро отменять. Не то чтобы прямо жить невозможно, но пиздец раздражает.
>Ну и еще вопрос, как блин сделать чтобы intellisense только если я какую-то клавишу жмакну работал, например tab.
Называется Toggle suggestion/completion mode, но включать её приходится каждый раз при запуcке Студии, по-другому вообще никак. Не знаю что это за ебанатство такое. Я им в поддержку уже не раз про это писал, игнорят.
Здесь кто-то предложил это исправить, и бот ответил что якобы исправлено, но это ложь
https://developercommunity.visualstudio.com/content/problem/712824/intellisense-toggle-completion-mode-should-persist.html
Можно ли кодить на связке js+css+html на фронте и c# на бекенде?
Пытаюсь сделать парсер постов с каналов.
И шота сразу затуп.
Куда слать то запросы в апи телеграм? Не в бот апи, а именно в атпи телеграм.
В бот апи это понятно сразу есть ссылка https://api.telegram.org/bot<token>/METHOD_NAME а в Telegram API в нет нихуя
Чи я просто тупой?
Вобщем анончике помогите, куда слать запросы то?
>А HTTPS чем плох?
Так его же поднимать надо. Это во-первых.
К тому же, этот >>873314 , может быть вполне себе прав,
и нет гарантии того, что CА не наёбут,
ведь удостоверяющий центр (Certification authority, CA),
может попросту подписать левый сертификат,
после чего, возможен будет MITM, с перехватом трафика.
Пикрил.
>>873413
А что хорошего в зондах и дырах от "спецслужб", хрен знает из кого состоящих?
>А что хорошего в зондах и дырах от "спецслужб", хрен знает из кого состоящих?
Это мировая практика
Этот дегенератизм - результат капиталистической централизации, в процессе монополизации рынка.
А в децентрализованных сетях, без центров, такая хуйня не канает.
> У них куча своих проблем
В отличие от вышеописанных проблем, проблемы децентрализации вполне приемлемы.
>Изначально, у меня, стоял вопрос в том, как бы - зашифровать трафик в локальной сети,
>при передаче JSON-постов наноборды, от сервера к клиенту, и на клиенте дешифровать его.
Вот эту бы шнягу шифрануть асимметрией, по MITM-защищённой схеме (поверх HTTPS и TOR):
https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Server/DbApiHandler.cs#L40
а потом уже можно наделать кучу серверов в TOR'e и в локалках,
чтобы они ещё и синхронились между собой, беспалевно.
Тогда наноборда будет ваще неуязвимой, походу (потому что база децентрализирована, а центры - хуй знает где), и всегда онлайн.
https://www.youtube.com/watch?v=Dv_nsoEmC7s
Посмотри все серии. А ещё учти, что он кор в пример приводит. В NET 5 линк ещё больше подшаманили. Например Any() выполняется как надо, без енумераторов.
Короче Linq на производительности особо не отражается. Старый дедовский метод (а скорее всего вообще всякий разный страшный хакинг) надо будет только для хайлоада для узких мест применять.
Я такой опции не нашёл. Даже решарпер не может. Но после того, как ты задашь отступ первой строчке, остальные строчки студия должна сама подстроить.
Надо чтобы кто-то такой code style fix запилил.
любому бэкэнду пофигу, чё там у тебя на фронтенде.
Когда там TakeLast переделают так чтобы он не проходил по всему массиву и брал только последние значения, а начинал с конца?
Просто сначала делал их обособленно, и на время доработки Api для фронтенда использовал ноду, в коде запросов просто прописал адрес куда слать. Теперь вот хочу чтобы просто запустил екзешник и, например, сервер на 80 порте висит, я делаю запрос на этот 80 порт, и мне отдавалось то что там на Vue написано, а в коде для фронтенда я бы не полный адрес писал, а типа: 'api/v1/Что-то что мне нужно'. Ангуляровский проект же как-то так делает, но я не сильно разбираюсь и не знаю как сделать так же для vue. Ну, т.е. концептуально я понимаю, я должен как-то прописать чтобы при сборке запускалась и сборка фронтенда, потом я копировал бы то что собралось в папочку, допустим www, и при запросах к сайту я бы отдавал index.html, но вот как это делается ручками я чет не совсем понимаю.
Слабоватенько и я это видео видел. Вот чуть лучше https://youtu.be/W64C3FsxjXE
Старый дедовский способ - обычный фор.
Безобразие. Мне, как серпом по яйцам, когда я вижу, когда приложения с интерфейсом работают как веб-сервис с локальным веб-сервером. Как побороть этот импринтинг, подскажите зумераны?
мимо дед-дельфист, формошлёп
Вот и не знаю я. Лично я бы не писал, но все пишут, и я пишу.
Хочешь как в плюсах? 100500 либ с 100500 стилей, круто ведь, когда в проекте 100500 разных стилей из-за либ. И гитхаб не подсвечивает, а код ревьювить надо.
Блин, так ведь правильно же. Почему-то вот сейчас венгерская нотация не считается чем-то хорошим, писать прификсы-суффиксы тоже не поощряется, а вот у интерфейсов осталось.
Это вопрос соглашений, как верно заметил анон выше. Следуешь принятым соглашениям - испытываешь удобство при коллаборации. Вот и вся суть.
Филип, ты?
Тесты для сишарпо кода на фшарпе? И чем оно лучше за тесты на сишарпе? но звучит интересно. Давно хотел попробовать фшарп, так как немного хаскель знаю.
Дедовский метод ещё есть.
Напрямую через SQL запросы. Есть еще не реляционные бд, с ними можно без sql работать.
Это как "напрямую"? я если честно слабо себе представляю как это должно работать.
Чё-то EncryptFile как-то хуёво тупо срабатывает. Надо фиксить.
Ну я понимаю как писать запросы в самом "ссмс" но я не понимаю как писать такие же запросы из под дотнета
Я может сейчас напишу неправильно, ибо знания у меня устаревшие. Пусть более знающие поправят.
В целом, классический подход, это использование из комплекта поставки БД-тулкита специального объекта, который олицетворяет запрос в БД. Этому объекту скармливаешь строку вида "SELECT * FROM db_table WHERE foo=bar" после чего объект возвращает датасет. Который мы уже либо скармливаем табличному виджету, либо ещё как с ним работаем.
Как вообще такие как ты дышат? Почему не умирают спускаясь по лестнице?
https://stackoverflow.com/questions/21709305/how-to-directly-execute-sql-query-in-c/21709663
Есть старинный нешарповый проект, который может быть только 32-разрядным, и он периодически дёргает вызовы из dll, написанной на c++, которая, в свою очередь, обращается к с#-dll которая зовёт через ещё пару прослоек искомый функционал, но это не важно.
Поскольку 32-разрядное говно мамонта должно работать и на 64-разрядной машине используется именной такая цепочка вызовов (разрядность конечной библиотеки должна совпадать с разрядностью ОС, а 32 не может звать 64): мамонт <-> с++ - с# <-> ServiceHost-обёртка для 64-разрядной ОС <-> c# <-> конечная dll, последние 2 пункта поставляются сторонней конторой, считаются рабочими и сделать с ними ничего нельзя.
Выглядит максимально уродливо, но тут 2 решения: поддерживать то, что есть, либо избавиться от мамонта и сделать всё с нуля под .NET, на что, конечно же, нет ресурсов, поэтому только первый вариант.
В общем, есть функция, назовём её bool MyFunc(filepath), внутри неё идёт обращение к сторонней библиотеке на c#. При обновлении сторонних библиотек (c# и конечной, на c++) появилась необходимость заменить вышеупомянутое обращение на новое, подробное руководство прилагается. Заменить - заменил, тесты прогнал и довольный собой пошёл докладывать коллегам, чтобы забрали мои поделки и использовали в нашем ПО с Мамонтом. И тут вдруг выяснялось, что вываливается ошибка на этой самой MyFunc!
При замене обращения к внешней c#-dll на старое Мамонт начинает работать корректно (тесты тоже), при обновлённом вызове Мамонт начинает ругаться, а тесты продолжают проходить (тесты нехитрые - 32-разрядное плюсовое приложение, где вызываются функции из библиотеки). Причём, если Мамонту подсунуть обновлённые c++.dll и c#.dll, оставив старый хост-процесс, то всё продолжает работать корректно.
Подозреваю, я упустил что-то в подключении ресурсов (dll) к собираемым проектам, но в свойствах видны правильные пути до явно новых версий файлов. А когда я попробовал удалить и добавить заново в Хост стороннюю c#.dll, то всё вообще наебнулось. До моей попытки этого действия dll была с синей стрелкой на иконке в обозревателе решений, а теперь без
В чём тут может быть проблема? кроме выбора работы, днк и прочих, связанных со мной неприятностей Как искать её решение?
Есть старинный нешарповый проект, который может быть только 32-разрядным, и он периодически дёргает вызовы из dll, написанной на c++, которая, в свою очередь, обращается к с#-dll которая зовёт через ещё пару прослоек искомый функционал, но это не важно.
Поскольку 32-разрядное говно мамонта должно работать и на 64-разрядной машине используется именной такая цепочка вызовов (разрядность конечной библиотеки должна совпадать с разрядностью ОС, а 32 не может звать 64): мамонт <-> с++ - с# <-> ServiceHost-обёртка для 64-разрядной ОС <-> c# <-> конечная dll, последние 2 пункта поставляются сторонней конторой, считаются рабочими и сделать с ними ничего нельзя.
Выглядит максимально уродливо, но тут 2 решения: поддерживать то, что есть, либо избавиться от мамонта и сделать всё с нуля под .NET, на что, конечно же, нет ресурсов, поэтому только первый вариант.
В общем, есть функция, назовём её bool MyFunc(filepath), внутри неё идёт обращение к сторонней библиотеке на c#. При обновлении сторонних библиотек (c# и конечной, на c++) появилась необходимость заменить вышеупомянутое обращение на новое, подробное руководство прилагается. Заменить - заменил, тесты прогнал и довольный собой пошёл докладывать коллегам, чтобы забрали мои поделки и использовали в нашем ПО с Мамонтом. И тут вдруг выяснялось, что вываливается ошибка на этой самой MyFunc!
При замене обращения к внешней c#-dll на старое Мамонт начинает работать корректно (тесты тоже), при обновлённом вызове Мамонт начинает ругаться, а тесты продолжают проходить (тесты нехитрые - 32-разрядное плюсовое приложение, где вызываются функции из библиотеки). Причём, если Мамонту подсунуть обновлённые c++.dll и c#.dll, оставив старый хост-процесс, то всё продолжает работать корректно.
Подозреваю, я упустил что-то в подключении ресурсов (dll) к собираемым проектам, но в свойствах видны правильные пути до явно новых версий файлов. А когда я попробовал удалить и добавить заново в Хост стороннюю c#.dll, то всё вообще наебнулось. До моей попытки этого действия dll была с синей стрелкой на иконке в обозревателе решений, а теперь без
В чём тут может быть проблема? кроме выбора работы, днк и прочих, связанных со мной неприятностей Как искать её решение?
> старинный нешарповый проект, который может быть только 32-разрядным, и он периодически дёргает вызовы из dll, написанной на c++, которая, в свою очередь, обращается к с#-dll
Лол блять. Походу, кто-то у нас здесь работает со взломанным нелицензионным программным комплексом. Без палева так.
Лолблядь, ты ошибся. И с чего ты вообще взял, что тут чего-то взломано? В цепочке, начиная с Мамонта, и заканчивая хост-процессом, всё написано в рамках одной организации, остальная часть (.Net-обёртка для вызовов конечной dll) в рамках другой.
>Старый дедовский способ - обычный фор.
Очень полезная расшифровка, без неё точно бы никто не догадался. Я имел ввиду, что когда приходится воевать с производительностью и код писали не любители индусских фильмов, то и старый дедовский не поможет. Там будет куча хаков и хреново читаемый код.
OCaml не пользовал, но F# люблю. Пытаюсь АПИ проекты на нём писать, а остальная логика на шарпе. Тесты на F# - это интересная мысль.
Короче, хочу чтобы разор ожил, чтобы на нем были нормальные проекты, а не только когда нужно за час-два накидать что-то чтобы показать.
Да что там бэкэнд, с помощью Blazor ты и фронтэнд можешь хуярить на шарпе.
https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor
Нет.
>Господи как сложно... и чем єто лучше EntityFramework?
Почему ты здесь спрашиваешь, скотина тупорылая? Спрашивай у своего заказчика. Может ему EF не нравится потому что в нём некоторые запросы не оптимизированы, тогда можно всё равно использовать EF но писать все запросы в виде чистых SQL, у EF есть такая функция.
Тут такое дело. Тут кэп стучит в окно и орет что как бэ если использовать все запросы как чистые SQL, то НАХЕРА ТОГДА EF, если даже тот же linq2db удобнее будет. Чё кэпу передать?
System.InvalidOperationException: 'No suitable constructor was found for entity type 'ART_Artykuly'. The following constructors had parameters that could not be bound to properties of the entity type: cannot bind 'session' in 'ART_Artykuly(Session session)'.'
Человек уже написал на EF, но заказчику это не понравилось, вместо того чтобы всё переделывать под что-то другое, нужно сначала узнать причину по которой не устраивает EF, если это "хотим чтобы все SQL запросы составлялись без посредников", то переписывать на другой фреймворк смысла, можно просто использовать чистые SQL запросы используя EF для миграций и создания моделей.
Зависит от уровня твоего мастерства. Если хорошо знаешь SQL, то очевидно ты напишешь лучше, чем транспиляция от EF или другого фреймворка. В других случаях эффект может быть отрицательным.
изменение имя не дало результатов... та же ошибка ,я дума проблема в девексе
Блядь, если в английский не можешь - выдели ошибку и в гуглтранслейте посмотри. Нет конструктора который бы принимал параметр который ты(фреймворк/либа) забиндить пытаешься.
Нихуя гуднайсовый код
Stackoverflow Dapper использует. Они его и разработали.
Двачую. Как можно работать с БД за деньги и не понимать, как это всё работает? Используешь EF - обязан понимать что твой EF делает, иначе у твоих клиентов начнут возникать магические ситуации и тормоза.
Тебе уже сказали, что твой вопрос в принципе твою недоквалификацию показывает. Но клиент - еблан.
Он видимо боится того EF, который был костыльным году в 2012. Сейчас он производителен и почти также немногословен, как и Dapper, а где-то даже выигрывает, потому что запросы руками или кодогенераторы писать не надо.
EF, кстати, может все исполняемые sql запросы показать, если очень надо. Он также может голый sql запускать и результат маппить к твоим классам/рекордам.
Основная его фишка - это не маппинг результата в объекты. Это может любой Даппер. Основная фишка - это миграции, когда ты руками БД вообще не трогаешь, а отдаёшь эту привилегию приложению. Забываешь про многие головняки с работой в БД быстро.
И вообще я не знаю что это за сессии, модели были созданы автогенерацией девекса, первый пик дюКонтекст, второй модель
я поискал и нашел вот это https://docs.devexpress.com/XPO/DevExpress.Xpo.Session
там есть вот такая магическая строка
Session workSession = new Session();
но я не знаю куда ее кастовать
ошибка у меня здесь на третем пике
кодогенерация же. собственно ты ее и сделал
На них весь LINQ построен. У тебя есть дерево вызовов, которые надо как-то менеджить и испольнять в какой-то последовательности. Дальше ограничен только фантазией.
Можешь кучу примеров на гитхабе найти. В обычных приложениях врят ли понадобится, а вот во всяких утилитах вполне.
Почитай какую-нибудь книжку по шарпу, нахуй ты пытаешься что-то делать не зная основ?
Но это и есть основы... и я сейчас эти основы изучаю, иногда я могу где-то завтыкнуть, поэтому я буду очень благодарен если мне укажут на мой завтык или ошибку
Я не виноват, раньше я был на нетФремворке, там был орм от еф, и там все работало с коробки... а тут какие-то пляски с бубном, сессии-хуессии
Core намного проще в обращении, чем старый фреймворк.
Сложно сказать, чего тебе там надо сделать, потому как у тебя там десятки, а то и сотни, всяких зависимостей и всё что мы тут пытаемся сделать - это ткнуть палочкой в одну и надеяться что оно заведётся.
1-2 недели потыкай, почитай статьи хорошо, а потом нормальных вопросов принеси (если останутся). Ещё у тебя есть поддержка от девэкспресса, их форум с вопросами/ответами и стэковерфлоу.
> Core намного проще в обращении, чем старый фреймворк
А вот не сказал бы.
Лично мне разобраться было легко, но я-то разбирался уже подрочив паттерны, солиды и покодив в реальных проектах и на джаве и на старом фреймворке. А вот вспоминая себя на первом курсе, я бы увидел эти дженерик хосты, подумал бы что это магия какая-то. А уж про лнику, так вообще говорить не приходится, я когда их увидел - просто повторял как в туториалах, ну и вообще. Короче, чем меньше всего есть из коробки - тем лучше новичку к.м.к. потому я бы наоборот советовал тем кто только разбирается взять какой-нибудь 3.5, а в идеале еще старше, там все как раз просто, и магию ты сам постепенно учишься делать.
По поводу ModelObject(Session session) : base(session) {} тот файл создан автогенерацией и мне кажется его трогать нельзя
Ты просто добавь наследование от XPObject и проверь.
Если боишься - сделай локальный коммит перед тем как что-то трогать, если что-то сломается - откати.
Но вот что я видел в туториале здесь https://www.youtube.com/watch?v=oXL9xlaXdJk&ab_channel=DevExpress
Ну блин. Тяжело советовать нормально.
Копипастни этот текест:
public class ART_Artykuly: XPObject {
public ART_Artyculy(Session session) : base(session)
}
Блядь. Как же тяжело пытаться соответствовать твоему стилю нейминга
public class ART_Artykuly: XPObject {
public ART_Artykuly(Session session) : base(session)
}
подозреваю что другая часть это ART_Artykuly.Designer и там уже есть partial
подозреваю что другая часть это ART_Artykuly.Designer и там уже есть partial
быстрофикс
Не нейм, а НАЗВА. пшпшпш...
Файл с connString. Новенький что ли?
В прошлом у нас был web.config, в котором была секция специально для этого. Фреймворк умел из коробки шифровать и дешифровать этот файл с помощью machine key
https://docs.microsoft.com/en-us/dotnet/api/system.web.configuration.machinekeysection?view=netframework-4.8
Теперь у нас apsettings.json/yaml, который ты тоже можешь шифровать, как нравится. Но рекомендуемое решение - Vault. Любое хранилище, типа https://www.vaultproject.io. Это хранилище в любом облаке доступно или можно руками доустановить там, где его нет. Даже в контейнере можно.
Все пароли, секреты, строки подключения, сертификаты должны быть в защищённом хранилище и добавляться в твоё приложение через IConfiguration при старте приложения. И потом в самом приложении ты делаешь config["ConnString"] и работаешь.
Можно как на скриншоте или как тут https://github.com/kdcllc/NetCore.HashiCorp.Vault
У майков есть своя реализация для коннекта к их Azure Vault. Но смысл один в один такой же.
Уже нет. Иногда имеет смысл для ручного throttling или когда работаешь с ресурсами, к которым мало доверия и приходится по несколько раз запрос повторять, пока правды не добъёшься. Но это какие-то особые ситуации.
Проще и производительнее просто взять HttpClient, добавить DelegatingHandler для обработки Auth фигни, настроить сервис и вперёд.
DelegatingHandler может за тебя нужные хэдеры и токены обновить и подставить вместо того, чтобы как по старинке делать запрос и получать 400/401/403, править и потом опять дёргаться. Никаких lock, никаких Retry() и прочей хуйни, которую так любят люди за 40. Этим надо или на пенсию или садиться и учить целый пласт тенхологий, которые развивались за последние 10 лет.
Кекус, в энтерпрайзе и не такие франкенштейны бывают. Там может быть C - C++ - C# - Python в рамках одного рантайм-квазимоды. Ещё видел тысячи строк кода в базе данных через кастомные интерпретаторы - это вообще пушка.
Не считается. Олды бухтят только. Ты всё равно var можешь юзать только как локальные переменные, члены класса изволь объявлять явно. Так что бухтение олдов мимо кассы. Если им нравится, пусть сами вручную дважды пишут что нибудь типа IEnumerable<KeyValuePair<int,KeyValuePair<string, Rect<int, int, long, long>>>>
А теперь мой вопрос.
Когда я пишу event += ... не вводит ли меня в заблуждение этот оператор? Хандлеры ивента стакаются же? Стакаются? Прямо в стек? Я могу передавать результат работы хэндлера в следующий?
Явно объявлять нужно только в тех местах в которых нельзя точно определить какой тип возвращает выражение присваивания, т. е. результат правой части.
Каждый обработчик получает одинаковый объект-событие, результат обработки никак не передается от обработчикак к обработчику.
Спасибо! Я так и подумал. И уже понял, что делал неправильно и отказался от стаканья обработчиков, оказалось был путь проще.
Теперь ещё один вопрос, наверное совсем нубский:
Есть солюшен. В нём есть несколько проектов типа exe. Как я могу запускать на исполнение второй экшешник из первого? Наверняка же в дотнете реализовано внутреннее "управляемое" решение. Ну не запускать же мне по старинке через шелл?
И вдогонку, я хочу внутри солюшена отдельную dll с общими ресурсами для всех exe. Как к ней обращаться за ресурсами? Вчера налепил навскидку и чот нихуя не заработало, каждый exe ищет ресурсы только у себя.
>Как я могу запускать на исполнение второй экшешник из первого?
https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.start?view=net-5.0
Общаться между процессами можно через MemoryMappedFile и EventWaitHandle
>И вдогонку, я хочу внутри солюшена отдельную dll с общими ресурсами для всех exe
Нужно регестрировать эту длл в global assembly cache, тогда все программы использующие эту dll будут брать её оттуда.
чет ты странного наговорил. Проблемы сети или временную недоступность компонента никто не отменял - и тут нужен повтор.
> process.start
Это и есть "по старинке", ИМХО. Я надеялся, что есть способ прямо изнутри вызывать события запуска тех или иных проектов решения. Ну, например, главное приложение и конфигуратор, при запуске главного приложения, если конфиг отсутствует, вызывается конфигуратор. Ну всё равно спасибо. Думаю, ничто не помешает мне сделать из главного ссылку на конфигуратор и просто вызывать публичную форму конфигуратора из приложухи, не запуская процесс вообще.
> регестрировать эту длл
Эммм, сложно, тупо, неудобно. Буду искать другие решения.
>>875189
>>875170
>>875142
Решил вопрос на свежую голову почитав документацию здеся https://docs.devexpress.com/XPO/2123/connect-to-a-data-store там нашел правильную правильную инициализацию подключения, сейчас все работает
https://dev.to/skipperhoa/login-and-register-using-asp-net-mvc-5-3i0g
У меня такого нет...
Это для старого ASP.NET (который на .NET Framework), а не ASP.NET Core. У тебя по всей видимости проект на ASP.NET Core, так немного по другому с сессией работают, гугли. Либо если тебе нужен именно ASP.NET MVC 5, то создай правильный проект.
Зачем грубить?
Ясно, мне нужен именно нет кор
Кстати если есть может репозиторий какой с примером работы с сессиями в коре я бы с радостью почитал
Отдал клиенту нужный код и заставил его повторить запрос. Нефиг выдумывать какой-то херни без надобности.
Ещё один. Оно тебе надо знать какой там из тысяч доступных типов сейчас вернулось? Ты их все в голове держишь что ли? Я перепрыгнул на var как только он появился и ни разу не испытывал потребности знать, что там конкретно вернулось из какой-то функции.
Мне нужно знать, что мой код делает, а не как он типы матчит.
var client = CreateHttpClient(params);
var user = client.GetUser(id);
var comments = user.GetComments();
var commentsToRemove = comments.Where(x => IsTwoYearsOld(x.CreatedOn));
псевдо код выдуманный на лету
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-5.0#session-state
Там же есть ссылка на их гитхаб с примерами. В самой статье тоже примеры есть.
Использовать stateful backend для многопользовательских приложений - моветон.
Хм. Хм.
Они получают один и тот же объект? Ну, дорустим я в EventArgs передаю ссылку на кусок памяти, вот обычный такой ref Memory<byte>. Вот я такой умный, я знаю для чего оно мне нужно. Вот кто-то через год взял мой код и не знает, для чего это нужно было и подписался в своем хендлере раньше, он берет и этот кусок памяти делает Slice и с полученным куском нехорошие штуки проделывает. Пойдет ли в моем коде все по пизде из-за этого?
Спасибо за ссылку!
ну так и говори - "у меня веб бэкенд CRUD подобный"
и не нужно свой частный случай на все ситуации проецировать.
пойдет конечно. и правильно будет. раскладываешь мины - не удивляйся, что рвануло
Че-то жиденько, мб есть другие способы? Но ладно, как тогда вычислить процесс открывший порт?
Юзаешь винапи, смотришь, кто там открыл эти порты, получаешь PID - убиваешь процесс.
После этого твою приложуху совершенно справедливо прибивает антивирус. На большинстве пользовательских компов, у тебя-то ясно антивирусозонда нетути.
Может кто работает в автоматизации на C#
подскажите пошагово как запустить через Jenkins выполнение Nunit тестов? Где вообще про это адекватно почитать. А то тесты написал на гит закинул и на этом как то все.
> Возможно как-то сказать фабрике, какой объект какого типа мне нужен, не передавая в неё объект этого типа?
Create<T>?
Вот как я понимаю - фабрика это именно та штука, в которой мы примерно следущее делаем: factory.AddZalupa().UsePizda(x=>x.AddHair()).Build();
А я вот в своих залупах обычно делаю класс, который возвращает интерфейс, типа клиент этого класса не знает что и как там билдится, он просто получает интерфейс и пользуется им, вся ответственность за создание - на таком классе. Вот и как правильно такую сущность обзывать? Я, сначала добавлял суффикс Factory, но из-за того что часто под фабриками то что я выше описал подразумевают - начал называть Provider, но блядь, меня смущает этот суффикс, потому что что он там провайдит-то? Просто видел как в некоторых других проектах подобное так называли, вот и стал повторять, но сейчас думаю и кажется что нужно как-то иначе обзывать. Builder? Ну, может быть, но тоже как-то не нравится.
Короче, как бы вы назвали класс, который, допустим дает клиенту какой-то класс для шифрования, либо класс который дает репозиторий, например во время разработки - там обычный лист, а в реальном проекте - уже обертка над каким-то провайдером БД.
builder.AddZalupa().UsePizda(x=>x.AddHair()).Build(); — Это билдер, а не фабрика. Фабрика это factory.CreateZalupa()
если тебе нужно выполнять повторяющуюся логику не связанную с бизнес логикой, то посмотри в сторону мидлвейров/атрибутов фильтрации
Спасибо, почитал, попробовал, у меня получилось сделать, особенно после прочтения этой статьи, https://metanit.com/sharp/aspnet5/16.12.php
Единственное там используется какая-то локальная автосгенерированая база, как подставить свою я не понял... в дальнейших статьях я так понял они работают с ней, но мне это не подходит...
Твои скрипты, которые ты будешь запускать в дженкинсе, должны примерно также работать локально. Ты вообще их писать и тестить локально должен, а не тыкаться в слепую через CICD (хоть дженкинс, хоть хуенкинс, тысячи их).
Дотнет тесты умеет запускать через dotnet test. У этой команды есть куча параметров. Для генерации и сбора отчётов могу использоваться дополнительные тулзяки. Но для обычного прогона и креша Jenkins job пойдёт простой dotnet test.
static List<Street> Streets = new List<Street>();
Хочу как-то так
static var Streets = new List<Street>();
Пишет что низя?
в файле проекта .csproj либо смени целевую платформу на .NET 5:
<TargetFramework>net5.0</TargetFramework>
либо добавь:
<LangVersion>9.0</LangVersion>
>.NET 5
У меня просто софтина пишется под семерку, на .net core 3.1. А поддерживается ли .net 5 на семерке?
Да.
А вопрос в следующем - как мне 100% вызвать метод Quit при всех ситуациях?
Ведь, когда оно открывает базу, оно создает процесс Access в диспетчере задач. Если где-то происходит бага с вылетом - я обычно останавливаю работу приложения и смотрю. Или например дебажу метками - дохожу до бряка, смотрю что там, понимаю что надо сделать, останавливаю выполнение.
Но в итоге эти процессы зависают мертвым грузом и мешают дальнейшей работе. Приходится открывать диспетчер задач и удалять руками.
Попробовал запихнуть в деструкторы - толи не понимаю, но не сработало.
Есть какой--нибудь 100% способ вызвать метод при всех вариантах закрытия проги? Вот в С++ такой способ есть
2) Можно как-то урезать размер готового .exe?
> останавливаю работу приложения и смотрю
Я могу только один вариант в таком случае придумать. Сделать батник, кинуть ярлык на него во внешние инструменты студии / на десктоп / на пинбар. В батнике вызовами taskkill -im "Access.exe" прибивать все экземпляры акцесса.
Но вообще, акцесс дерьмо, я бы перешёл на нормальные СУБД здорового человека при первой возможности
Как запустить net core проект для windows в линукс? Мне не нужна компиляция или развертывание под линукс, мне нужно чтобы проект разработанный на windows запускался у меня в линуксе.
Так когда через консольку пишу запуск автотестов то все в порядке.
А когда через jenkins то гавно какое то. Только изменения кода в гит показывает и все. Может быть из за того что все делаю локально? хотя по идее должно быть всё равно.
В чем может быть причина?
проблема решена, удивительно но азур по умолчанию добавляет себя в фаервол... фейсплам, ну или может если есть анон который знает зачем это сделано объяснит
Желательно чтобы был на выходе bitmap.
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TextBox Text="{x:Bind Path=Data.FirstName }" />
<TextBox Text="{x:Bind Path=Data.LastName }" />
<Button Click="Button_Click">Нажмите меня</Button>
</Grid>
</Window>
Компилятор меня убеждает в том, что Bind не существует в пространстве имен и т.д. https://pix.my/TCAeOD
Сколько не гуглил - подобное решается объявлением типа xmlns:x=.... но оно сделано. Ссылки вроде бы нужные тоже есть, кажется. В общем, то ли лыжи не едут, то ли я идиот.
Так ты сначала C# изучи, а потом уже к фреймворкам переходи. Ты сразу пытаешься и шарп учить и wpf осваивать.
>я делаю какую-то фигню, а получается какая-то хуйня
damn son, как тебе помочь то, когда ты двух слов связать не можешь? Где хоть что-то, за что можно ухватиться и начать помогать?
Я с дженкинсом знаком с 2014, ставили его локально, на виртуальные машины, в местный дата центр, в AWS. Там же блять всё просто как "раз два три".
Правда когда есть возможность альтернативы - перепрыгиваем на неё. Типа Azure DevOps. Дженкинс немного устарел.
2) попробуй /p:PublishTrimmed=true
https://docs.microsoft.com/en-us/dotnet/core/deploying/trim-self-contained
Это только для публично доступного сервера. Т.е. его можно пингануть через интернет. Я бы на вашем случае добавил виртуальную сеть (Virtual network) с подсетью (subnet) и настроил фаервол чтобы БД сервер был доступен только из этой подсети и добавил ваш App Service в ту же самую подсеть.
Нефиг БД наружу выставлять.
Спасибо, попробую.
А на чём его тогда изучать? Но WPF для новичка сложно конечно. Лучше консольные приложения пару месяцев пописать.
>>876693
Примеры из книг почти всегда полное гавно. Лучше идти на официальный сайт и смотреть примеры там. У них всегда есть гитхаб репо, который можно стянуть и запустить.
https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-wpf?view=vs-2019
Там намного больше примеров есть, в том числе и работа с БД.
Бамп вопросу. Тут что никто в net core не может? Или в линукс? Пиздец, одна школота.
Вообще-то Ажьур c мягкой ж и А, которая звучит как среднее между А и Э.
То есть ты сам школьник, раз не знаешь ответа на свой вопрос? Тогда покинь сайт, борда 18+.
Это просто - берешь приложение разработанное под вин, берешь линукс и запускаешь.
> размер образа докера винды
Размер-размером, а там же ещё и лицензия нужна, никто не отменял.
мимо
лицензия малая проблема. ведь поди еще попробуй запусти докер вин образ под линуксом
Думал об этом, но трафика жалко.
А все разобрался.
Спасибо что пытался помочь. А я паниковал и херню писал.
Все запустилось и заработало когда в Jenkins написал команды консольные на запуск автотестов и все норма начало работать.
Спросил я, и я не знаю, нужно не нужно, я в облаке работаю, просто слышал что-то такое
>Берешь рантайм, запускаешь собранную неткором dll
Нахуя мне это? Мне не готовое приложение нужно, а сам проект.
В облаке у тебя точно также крутится какая-то машина с какой-то ОС. Если заведёшь своё произведение локально, то и в облаке также запустится. Хочешь в докере, хочешь в кубернетес, хочешь прям на хосте.
Веб приложению на дотнете пофиг, на какой ОС его запустили. Убунту, Виндовс, Alpine. Можешь вообще на Raspberry PI захостить.
Код везде будет ОДИНАКОВЫМ!
Естественно, если ты в коде решил дёрнуть АПИ какой-то ОС на прямую или подключиться к чисто виндовому сервису (AD, Cert Store, Event Storage, etc.), то на Убунте оно рухнет, потому что там таких сервисов нет. Но рухнет тупо на этапе подключению к виндовому сервису.
с Binding не работает, хоть и не выдает ошибку, но это уже другой момент. В книжке черным по белому пишут, мол биндинг прошлый век, щас надо юзать бинд.
>>876759
Учу по книге, но похоже буду искать другой материал. Изначально понравилась подача, а вот то что в примерах не разобраться ибо не работает - косяк.
>>876786
тТут такое дело, что не зная основ оф документация - это как изучать иностранный язык не зная алфавита.
> не зная основ оф документация - это как изучать иностранный язык не зная алфавита
Глупости.
оф.документация - это как словарик в дополнение к учебнику при изучении языка.
Мне нужно как-то чистить контекст? И реализовать пэйджинг в датагриде? Есть какие-то опенсорс примеры?
enum MyEnum {
Element1 = 1,
Element2 = 3,
Element2 = 10, 11
}
нельзя
Подожди, а если вот так (ElemntType)2 сделать, то я получу Element2 типа ElementType? Потому что он мне для этого и нужен.
/ Object: Trigger [dbo].[TriggerAspNetUsersInsert] Script Date: 12/10/2020 8:05:02 AM /
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TriggerAspNetUsersInsert]
ON [dbo].[AspNetUsers]
AFTER Insert
AS
BEGIN
\tSET NOCOUNT ON;
\t
INSERT INTO USR_User with (rowlock)
([USR_Nazwa]
,[USR_Telefon]
,[USR_Ulica]
,[USR_Miasto]
,[USR_NumerDomu]
,[USR_NumerLokalu]
,[USR_KodPocztowy]
,[USR_NIP]
,[USR_KONID]
,[USR_AspNetUsersId]
,[USR_WaznoscUmowy]
,[USR_DataWeryfikacji]
,[USR_Komentarz]
,[USR_PoziomUprawnien])
select
'',
PhoneNumber,
'',
'',
'',
'',
'',
'',
0,
Id,
'2020.01.01',
null,
'',
0 from inserted
END
/ Object: Trigger [dbo].[TriggerAspNetUsersInsert] Script Date: 12/10/2020 8:05:02 AM /
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TriggerAspNetUsersInsert]
ON [dbo].[AspNetUsers]
AFTER Insert
AS
BEGIN
\tSET NOCOUNT ON;
\t
INSERT INTO USR_User with (rowlock)
([USR_Nazwa]
,[USR_Telefon]
,[USR_Ulica]
,[USR_Miasto]
,[USR_NumerDomu]
,[USR_NumerLokalu]
,[USR_KodPocztowy]
,[USR_NIP]
,[USR_KONID]
,[USR_AspNetUsersId]
,[USR_WaznoscUmowy]
,[USR_DataWeryfikacji]
,[USR_Komentarz]
,[USR_PoziomUprawnien])
select
'',
PhoneNumber,
'',
'',
'',
'',
'',
'',
0,
Id,
'2020.01.01',
null,
'',
0 from inserted
END
Что сформировать базовое понятие о них и как их писать.
Там миллион возможных причин. Криворукостью можно столько всего наделать. Без нормального анализа кода помогать тебе как в воздух пальцем тыкать. Авось да поможет.
DbContext надо по новой на каждый запрос (клик по кнопке) создавать. Или уметь его в ручную менеджить и писать дополнительные сотни строк кода.
> DbContext надо по новой на каждый запрос (клик по кнопке) создавать.
Нахуя? Я думал там ленивые загрузки, оптимизация изподкоробки все дела и создаю в скопуе окна/класса. Алсо, это же будет означать что к базе идет новый запрос, а это же нихуя не оптимизация. У меня в sqlite простой vacuum 10 секунд на околонекроте работает. Разве не лучше наоборот выгрузить данные в контекст?
> Там миллион возможных причин.
Причина в том что когда я делаю изменения в бд я обновляю датагрид и делаю это простым присвоением сурса = контекст.таблицанейм и он походу пытается загрузить всю таблицу.
WinForm, есть DataGridView
в ячейках есть выпадающее меню с списком(коллекция)
Проблема в том что при кликах на выпадающее меню оно вызывается минимум с второго раза (первый клик видимо берет ячейку в фокус, а второй уже отрабатывает как и положено) или с третьего если кликать на ячейку а не на саму галочку выпадающего списка
Как фиксить? хочу делать одиночный клик
Нашел, EditMode, не идеальный результат но сойдет
Хоть бы сказал, Razor pages или MVC или чего там?
Если не Razor Pages, то надо всегда смотреть контроллеры, а там уже увидишь, куда ссылки ведут.
/Identity route обычно добавляется через
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
Если всё это добавлялось не в ручную, а через scaffold, то он тебе сам надобавлял всяких View.
блиаааа.....я даже не знаю откуда тут заходить, чтобы хоть как-то помочь начинать. Чувак, кури мануалы.
Ну когда создаешь новый объект все параметры можно добавить одним обращением по типу :
object = new object{pmtr1, prmtr2, prmtr3 .... prmtr99}
а тут :
object.pmtr1 = pmtr1;
object.pmtr2 = pmtr2;
....
object.pmtr99 = pmtr99;
нельзя это сделать одним обращением как при добавлении?
>>877825
Да ничего я не городил, проект почти пустой, и рутингы я не трогал
>>877823
MVC CORE 3.1
Верно это Identity route, но как мне туда зайти и там что-то поменять, мне нужно сделать авто переадресацию с этой страницы
>Верно это Identity route
Значит гугли как сделать кастомные страницы регистрации и всё что связанно с аккаунтами.
Нельзя, это тебе не ЖС
Инициализатор же, анон, ну ты чего, совсем штоле нуб?
MyUser user = new MyUser
{
USR_Foo = Bar,
USR_Baz = Hurr,
USR_Durr = Derp,
USR_Date = DateTime.Now
}
В си и его потомках нет и не будет никогда конструкций, наподобие "with" (фууу, мерзость какая, паскалебляцкая).
Это принципиально и любой сишник тебе скажет, что твой код на скрине правилен.
А какие + такого подхода, я виду только минус, множество обращений к обьекту
Ну когда я в последний раз интересовался, сишники аргументировали, что этот кейворд якобы запутывает кодера относительно того в каком неймспейсе он сейчас находится. Если я правильно понял и/или запомнил.
... но когда я был молод и кодил в дельфи, этот кейворд был идеальным решением для написания паттерна "адаптер", при условии, что адаптируемые классы имеют разные методы. Но если методы совпадают, просто прописываешь явно класс, напишу пример псевдокодом, чтобы не мучить вас бегин эндами:
ForeignClass obj1;
InternalClass obj2;
with (obj1, obj2)
{
obj2.Name = obj1.Name;
Date = CurrentDate;
State = ObjectState;
Position = Rect.Position;
Size = Rect.Size;
}
Вот так быстро и красиво происходит адаптация. Происходила.
В double? можно
У нас тут модератор есть?
>Да ничего я не городил, проект почти пустой, и рутингы я не трогал
Все мы так когда-то отмазывались. Магии не существует. Где-то лежат заветные строчки кода. И лежат они на самом видном месте. Только у тебя знаний нет их прочитать правильно.
На вот почитай. И ещё несколько сопутствующих статей.
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity
О! Он показал файл проекта? А то я реквестировал и ушёл. На коре проект-файлы несколько иначе организованы. Нужно по новому таргет прописывать, чтобы заработало.
Вот репост специально для тебя:
>>1876966
> Вот пример проекта https://github.com/dotnet-architecture/eShopOnWeb
> Он у меня ни в докере не запустился, ни локально на линуксе. Там бардак полный, образ контейнера вроде линуксовый используется, но в csproj захардкожены виндовые пути со слэшами и много еще windows-специфичных штук. Это может пример не очень подходящий, сложноватый, но и другие проекты от microsoft запустить часть не получается, потому что почти все написаны под виндой в visual studio.
Не слушай дурачка. Всё что есть из коробки в айдентити - вшито в программный код, никак это изменить нельзя, только писать своё и говорить айдентити чтобы он использовал его, а не вшитое по стандарту.
>никак это изменить нельзя
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity
Скафолдишь нужные файлы и редактируешь их по своему вкусу.
Он же не сказал, как он это айдентити добавлял. Командой, гуи, с какими опциями, или может в ручную код копипастил из разных статей? Он этот айдентити раут и сам мог прописать где-то, но не понял, что он это сделал.
Сам то по ссылке статью читал?
>To maintain full control of the Identity UI, run the Identity scaffolder and select Override all files.
И далее идёт пример в котором убирается вызов services.AddDefaultIdentity<IdentityUser>() и указываются пути по которым будет браться написанный тобой UI. Т. е. то что я написал:
>только писать своё и говорить айдентити чтобы он использовал его, а не вшитое по стандарту.
>>878275
Он сказал, что ничего не трогал, на что в ответ получил какой-то бред про отмазывания.
>Он сказал, что ничего не трогал
Программист, который не смог разобраться с раутами в маленьком проекте, сказал что ничего не трогал. Сам то в это веришь? Миллион раз на таких джунов нарывался в разных городах и странах. Всегда круглые глаза, всегда "это не я, оно само!!!", и никогда нормально проблему объяснить не может.
Я-то читал и делал, а вот ты видимо нет.
>To maintain full control of the Identity UI, run the Identity scaffolder and select Override all files.
Это чтобы всё полностью переписать. Но это делать необязательно, можно изменить только пару нужных тебе файлов.
Всё ведь в статье, читайте внимательнее.
Right click on project -> Add -> New Scaffolded Item -> Identity -> выбираешь нужные страницы
Ребят, можно ли скомплить с помощью vs 2019 проект сделанный на vs 2015, там есть совместимость? Язык иттшный
Можно
Я встречал пару раз проблемы при подобном переходе. Один раз они были связаны с Windows Workflow Foundation, а другой - с неправильными nuget пакетами подключенными. Шансы встретить неполадки - минимальны.
Довольно тупой вопрос, но все равно поясните.
Вот допустим, я хочу такую возможность дать пользователю: Он загружает шаблон устройства в определенном индустриальном формате, формат, естественно, не божественный JSON, а какой-нибудь MIB или что-то в этом духе; может быть кто не знает, но эти MIB бывают по 90к и больше строк, соответственно нужно будет ждать пока оно загрузится, потом нужно это распарсить, а потом я бы хотел вернуть клиенту уже JSONчик с тем что я там прочитал, распарсил, чтобы он то что ему нужно отметил, может быть как-то по своему назвал(думаю тупо выглядеть просто будет если пользователь все это MIB - дерево будет видеть, возможно человек хочет имена в нормальном человеческом виде смотреть).
Ну так вот, как оно должно выглядеть
1. Со стороны взаисодействия клиент-сервер? Ну, в смысле должен ли я сразу пытаться парсить как только получил первые байтики или сначала мне бы полностью загрузить файл, потом уже парсить, а затем удалить его?
2. Как вот такая двухуровневая фигня должна работать? Ну, т.е. я правильно понимаю, что я просто на сервере делаю 2 эндпоинта, один для файлов, другой уже для конечного json'чика, который и буду сохранять в базу? Или как-то иначе делать нужно?
3. Самое наверное сложное. Я правильно понимаю, что будет говнокодом если я все это просто в api-контроллере делать буду? Ну, просто как я понимаю - правильно было бы это все разбить по сервисам, но ведь эти сервисы никогда и нигде переиспользоваться не будут, я вобще, по сути это для себя делаю, чтобы вручную не забивать базу принтеров, а можно было вот так вот кинуть на форму этот MIB-файл, он бы там распарсился, я отметил что мне нужно только объект который за уровень чернил в базе иметь, и сохранил такой вот шаблончик устройства, а потом мог бы создавать новые принтеры, смотря сколько в них чернил осталось. Не будет ли оверхедом выносить парсинг mib'а и создание dto для него в отдельный сервис?
все тот же сисадмин, который таки сделал возможность читать состояние чернил в принтере но в процессе заебался ручками вбивать описание какой объект нужно читать у принтера
Довольно тупой вопрос, но все равно поясните.
Вот допустим, я хочу такую возможность дать пользователю: Он загружает шаблон устройства в определенном индустриальном формате, формат, естественно, не божественный JSON, а какой-нибудь MIB или что-то в этом духе; может быть кто не знает, но эти MIB бывают по 90к и больше строк, соответственно нужно будет ждать пока оно загрузится, потом нужно это распарсить, а потом я бы хотел вернуть клиенту уже JSONчик с тем что я там прочитал, распарсил, чтобы он то что ему нужно отметил, может быть как-то по своему назвал(думаю тупо выглядеть просто будет если пользователь все это MIB - дерево будет видеть, возможно человек хочет имена в нормальном человеческом виде смотреть).
Ну так вот, как оно должно выглядеть
1. Со стороны взаисодействия клиент-сервер? Ну, в смысле должен ли я сразу пытаться парсить как только получил первые байтики или сначала мне бы полностью загрузить файл, потом уже парсить, а затем удалить его?
2. Как вот такая двухуровневая фигня должна работать? Ну, т.е. я правильно понимаю, что я просто на сервере делаю 2 эндпоинта, один для файлов, другой уже для конечного json'чика, который и буду сохранять в базу? Или как-то иначе делать нужно?
3. Самое наверное сложное. Я правильно понимаю, что будет говнокодом если я все это просто в api-контроллере делать буду? Ну, просто как я понимаю - правильно было бы это все разбить по сервисам, но ведь эти сервисы никогда и нигде переиспользоваться не будут, я вобще, по сути это для себя делаю, чтобы вручную не забивать базу принтеров, а можно было вот так вот кинуть на форму этот MIB-файл, он бы там распарсился, я отметил что мне нужно только объект который за уровень чернил в базе иметь, и сохранил такой вот шаблончик устройства, а потом мог бы создавать новые принтеры, смотря сколько в них чернил осталось. Не будет ли оверхедом выносить парсинг mib'а и создание dto для него в отдельный сервис?
все тот же сисадмин, который таки сделал возможность читать состояние чернил в принтере но в процессе заебался ручками вбивать описание какой объект нужно читать у принтера
> должен ли я сразу пытаться парсить как только получил первые байтики или сначала мне бы полностью загрузить файл
В зависимости от того, как этот файл читается. Если читается построчно/побайтово, то зачем тебе ждать весь? Читаешь синхронно.
> Как вот такая двухуровневая фигня должна работать?
Паттерны-паттернушки 2020, ёпт. Я с дивана вижу помимо клиент-сервера паттерн адаптер.
> я вобще, по сути это для себя делаю
С этого надо было начинать. Ебашь с подливой любой говнокод за который не стыдно перед самим собой. Лишь бы работало.
>должен ли я сразу пытаться парсить как только получил первые байтики
Не обязательно, но желательно. Если будешь сразу парсить из потока, то займешь меньше оперативной памяти.
>сначала мне бы полностью загрузить файл, потом уже парсить, а затем удалить его?
Удалять ничего не нужно, также как и сохранять, всё держится в оперативной памяти. Ты же не гигабайтные файлы собрался в JSON конвертировать?
>Как вот такая двухуровневая фигня должна работать?
Где ты там два уровня увидел? Со стороны клиента делается POST-запрос, со стороны сервера приходит либо ответ с телом в виде готового JSON, либо ссылка на месторасположение файла.
>правильно было бы это все разбить по сервисам,
По каким сервисам? Один сервис MibToJsonConverterService в котором будет логика конвертации, далее добавляешь его в виде синглотона и внедряешь в контроллер, который будет его использовать.
Типа студия почему-то уже на проекте с 10к строк и 2 проектами в одном солюшне начинает через 2-3 часа лагать жутко. Это на пеке с i7 9700k, 32 гигами оперативки, ссд который по PCI Express подключается. Это пиздец как раздражает.
С другой стороны - райдер. Пиздец какое-то кривое поделие, еще и за меня хочет форматировать. И эти уебищные подсказки насчет типов и имен, блядь, пол экрана отнимают. Вообще какая-то всратая параша на мой взгляд. Но она хотя бы не тормозит.
С третьей - вс код. Тоже не тормозит, но пиздец, постоянно этот ебучий Omnisharp - отваливается, постоянно ломается подсветка, не так удобно многие штуки делать как в студии.
С четвертой - нахуй это все, буду кодить в Notepad++, вот серьезно, я в нем отрыл проект на 500к строк, он открыл его нормально, по нему оч шустро бегать можно, было бы нормальное автодополнение, нормальные инструменты которые позволяли бы чуть больше в ИДЕ чем редактор превратить - было бы заебись. Пока что приходится писать в нем, переключаясь на студию для отладки.
Как вы кодите в проектах больше 50к строк? Неужали терпите по 2 минуты на создание нового файла каждый раз? Или есть какие-то способы заставить студию быть чуть шустрее? Просто у меня в студии из плагинов только который гайдлайн рисует чтобы не забывался и держался в 120 символов на строку, в остальном - голая.
>2 проектами в одном солюшне начинает через 2-3 часа лагать жутко
Не знаю, со студией проблем уже лет 6 не было. Проект с 2кк строк и 30ю проектами + пару других солюшенов держатся открытыми днями без перезагрузок. Полёт нормальный.
Забыл добавить, что у меня ещё и решарпер стоит. А без него ставил стоял Productivity Power Tools. На скрине то что сейчас установлено.
Вообще в этом году с резким подъёмом Cloud Native Development появилась куча тулзяк, с которыми можно и без студии большую часть времени кодить. VS Code отличная штука. Иногда файлы в Notepad++ правлю.
Из тулзяк советую глянуть https://devspace.sh/cli/docs/introduction
Но вообще их щас дофига. Даже Майкрософт свою готовит: https://github.com/dotnet/tye
В чём прикол: берёшь голую машину с установленным Git и Docker с включенным Kubernetes (k8s можно и через другие инструменты локально завести, просто через докер удобнее), стягиваешь свой репо с кодом, описываешь свой проект и его зависимости в devspace.yaml файле, запускаешь devspace dev.
Оно стягивает все твои Redis, Postgres, Sql Server, Vault, RabbitMQ и т.д. Заводит это всё в твоём локальном кластере и начинает работать. Быстро, просто. Если напортачил, сносишь всё через devspace purge и начинаешь заново. Отнимает секунды. Также очень круто для интеграционных тестов и деплоймента в QA/Prod/подставь_название.
Дебаг становится почти не нужным. Ты изменяешь файл и твой проект сразу же перекомпилится и новая версия доступна через секунду. Проще добавить какой-нибудь Console.WriteLine() с нужной инфой, чем дебаг подключать. Но дебаг по-прежнему доступен для более сложных ситуаций.
VS 2019 всё-таки самая удобная для разработки.
Мелкие выпустили опенсурс, а потом поглотили его (классика же). Теперь будут выходит несовместимые с линуксом интересные либы, которые мотивируют переходить на швиндовс
https://ru.wikipedia.org/wiki/Embrace,_Extend,_and_Extinguish
Некоторые языки пиарятся что победили косяк "==" с человеческим фактором. А язык, который позиционирует безопасность, привносит сразу два а может и больше аналогичных костыля.
Очередная недальновидная хипстота а сейчас уже модное СЖВ гробит неплохой проект. Ведь тусовка важнее идеи.
Это было в раст тред.
Как WPF.
Запусти мне готовое большое и сложное легаси-приложение на WPF не устраивая адских кранчей по переписыванию всех форм на всякие там авалонии, эты и прочие вэиквиджетсы.
Проиграл с дауна. Это не либа, а фреймворк. Не работает он на линуксе не потому что злые майки так захотели, а потому что на момент создания wpf не было возможности сделать его кроссплатформенным. Сейчас майки делают отдельный фреймворк для этих целей, под названием MAUI.
Ты главное таблетки не забывай пить.
Собсна сам код которым я пытаюсь что-то сделать. Было много разных версий, но сейчас когда я пытаюсь считать с порта то программа будто попадает в беск. цикл и не может найти выход
Из-за того что ты назвал его дауном? Кого это вообще останавливает на дваче?
>Сейчас майки делают отдельный фреймворк для этих целей, под названием MAUI.
в котором поддержка не винды будет силами комьюнити
ну и мауи так себе замена
>в котором поддержка не винды будет силами комьюнити
Только Линукса; Мак, iOS и андроид будут из коробки
Нет, я захожу на новую страницу а полях уже введенные данные поверх плайсхолдеров, а еще когда ввожу выпадает подсказки, и они не отключаются блин...
То другой анон был, но я тоже не вижу. Вообще зачем на эту тему уже есть миллионы комментов на англоязычных ресурсах с аргументами один в один как здесь. Сидит группа обиженных Майкрософтом в 90х-начале 00х и продолжает ныть про Embrace, Extend, and Extinguish. В то время как остальной мир уже давно moved on.
string dataString = init();
мне сказали нет, так не пойдет, давай синглетон, я почитал и пока вижу как все от него плюются, и рекомендуют не юзать в любом случае
а еще я не понимаю как вернуть собственно сам стринг
class Singleton{
private static Singleton instance;
private Singleton()
{}
public static Singleton getInstance()
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
Это поведение браузера, отключается через браузеровское АПИ: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete
Есть жс библиотеки, которые так делают. Тогда копай доку по этой библиотеке. Но судя по скрину - это твой браузер.
Клиент говорит что у него на других сайтах все работает нормально... без этих всяких авто-заполнений
Ну собственное EEE и работает. Линукс уже бортанули с кривой поддержкой, а мак и прочее заманят несовместимыми решениями онли винда.
Если с околонуля до пару часов. Основные конструкции языка + Основы ОПП и уже можно пилить игори. Дальше только курить документацию юнити. Код был конечно с точки зрения С# дно, но зато легко переносимый на любые движки.
Ладно, разобрался, Аноно лучше ответь зачем он нужен то по факту, этот https://www.youtube.com/watch?v=-AlFSe_K27A&t=658s&ab_channel=VolodyaMozhenkov дело говорит?
Нифига из твоего описание не понятно, что конкретно тебе нужно сделать.
Синглтон прост как два пальца: что-то, что возвращает один и тот же объект на любой вызов. Нынче делается через всякие IoC/DI. Когда пишешь свой код как обычно, без всяких статиков, но для производительности создаёшь только один экземпляр своего класса и переиспользуешь его везде. Например HttpClient, MongoClient, Configuration. Иногда проще статик класс запилить.
Вообще последние лет 5 вижу ручные синглтоны только в индусских проектах. Эти же индуссы любят про них во время собеседований спрашивать, типа выдай все 50 возможных вариантов написания синглтона для всех возможных и невозможных ситуаций: запретить наследование, выдать/запретить конструктор, изменяемый синглтон (для всяких токенов, например), и ещё миллион ситуаций, которые за тебя уже решили во всякий DI тулзах.
Ты чё как офисный планктон? На каком устройстве, в каком браузере клиент проверяет? В самом браузере это можно отключить. Всякими плагинами это можно отключить. Не все браузеры это делают. Чё за детский сад?
> этот дело говорит?
Не смотрел, но осуждаю. Синглтон много где применим и слепо его избегать глупо. Тебе нужно, скажем, держать в памяти часто используемые данные, это быстро и удобно. Но ты не используешь их, ПОТОМУ ЧТО ПРЕПОД НА КАФЕДРЕ СКАЗАЛ, ЧТО СИНГЛТОН ПЛОХА-ПЛОХА!Поэтому ты каждый раз грузишь одни и те же данные, чтобы один раз к ним обратиться, а потом ГЦ их высвобождает, забирая ресурсы компа. А через пару секунд ты снова грузишь те хе самые данные в новый инстанс. Чтобы снова один раз прочитать. И снова ГЦ. Потомушта синглтон плоха, тупа, ламерски!
Что за Плагины?
Давай тогда определения кеша и глобальных переменных, что ли. У меня есть подозрение, что ты мягкое с тёплым сравниваешь.
А ещё, судя по твоему коду выше, то что ты там разобрал будет периодически ломаться в рантайме.
if (instance == null) - эта проверка is not thread safe.
https://ideone.com/FT2oYq
Из другого модуля тоже единичку вернёт?
Потоки предусмотрены, юзал этот пример https://shwanoff.ru/singleton/ но спасибо за замечание.
https://help.semmle.com/wiki/display/CSHARP/Double-checked+lock+is+not+thread-safe
В том примере тоже не правильно. Double check с локом - это древний подход и его желательно избегать. Лучше всего в шарпе Lazy подходит. Код компактнее и никаких локов.
Новичок, бойся локов как огня. Там бездна инфы для изучения, и даже после изучения не факт, что у тебя что-то да не отвалится.
а, сорян, не заметил, тогда норм
Вот пытаются MAUI сделать. Написать движок для отрисовки под конкретную платформу не хухры мухры. Не всякие электроны, которые в инстансе браузера хтмл рисуют, а когда настоящий АПИ у хостящей ОС тягать надо, чтобы нативно выглядело. WPF и WinForms приварено к АПИ винды. Проще новый фреймворк запилить.
Пример хуевый, никакие volatile и локи не нужны, эффективнее использовать конструкцию
if (SingletonValue != null) return SingletonValue;
var singletonValue = new SingletonValue();
return Interlocked.CompareExchange(ref SingletonValue, singletonValue, null) ?? singletonValue;
> зачем он нужен то по факту
Если без всяких контейнеров и прочего, то зачастую тебе бывает удобно иметь некую сущность которая бы была неким узлом приложения, и тебе не всегда хочется перегружать конструктор других классов отдавая туда этот узел, чтобы иметь такой вот узел.
Допустим, вот ты пилишь абстрактноте приложение. У тебя есть свой планировщик задач, есть своя ОРМка, есть свое логгирование, ты хочешь из любого класса получить возможность пользоваться всем эти. Довольно удобно в данном случае сделать этот класс синглтоном, Да, тут получается проблема с тем, что классы начинают быть завязаны на синглтон, да, получается, непереносимый код, только вот зачастую это не так и страшно, как многие малюют. Ну и да, то что синглтону трудно наследование реализовать - тоже не так страшно, зачастую сущности что должна быть синглтоном это и не нужно.
Другое дело что ньюфаг узнав про него нечинает пихать куда надо и куда не надо, у него в проекте этих синглтонов становится куча, в рандомных местах дергаются инстансы и просто чтобы вникнуть в логику работы приходится разбираться во всей этой "архитектуре".
Блядь, как вспомню свой первый год, дали мне проект, пилил его какой-то хитровыебанный мастер архитектуры: синглтон для создания событий, синглтон для логгирования, синглтон для того чтобы поверх старого синглтона логгирования можно было логгировать новым методом, синглтон для глобальной обработки ошибок(ведь мы такие вот хитренькие, падать из-за говнокода не хотим), синглтон, блядь, для моделей, нахуй, синглтон для подключения к БД, при этом без какого-то нормального пула соединений, не, нахуй, пусть у нас все пытаются получить соединение, а база просто в определенный момент начинает охуевать. Как же охуенно было это разгребать, просто не представляете.
Ну а вообще в среде юнитистов принято нормально писать? Обычно всё что я видел было либо как ты описал, либо ооочень сильно оверинженирено.
Допустим есть класс C с методом M { int r = 2+2; return r;}
Далее в Main присваивается int a = С.М();
Вопрос. Каждый раз, когда мы используем переменную a у нас производится вызов С.M? Или результат для а хранится в памяти?
Хранится ли в памяти r? Или он сразу убирается сборщиком после присваивания а?
>Хранится ли в памяти r? Или он сразу убирается сборщиком после присваивания а?
это значимые типы. они вообще на стеке лежат и GC про них не знает.
А можно подробнее, чего там именно гробит хипстота?
Аноны, зачем нужна база данных и СУБД? Можо ли как-то, на c#, на серверной стороне, реализовать базу данных на файлах,
чтобы хранить там логины-хэши паролей, и данные юзера, его активность - в файлах, а не в базах данных?
Можно. Получится менее удобно в пользовании, сложнее будет управлять доступом, работать будет медленнее. Дерзай.
> зачем нужна база данных и СУБД
Затем что она просто хранит твои данные, удобно и предоставляет быстрый доступ. СУБД же не дураки пишут, там всякие хитрые алгоритмы применяются для сжатия данных, для индексирования, всякие статистические методы, чтобы обеспечить тебе более быстрый доступ, например - "горячие-холодные данные", когда то что чаще нужно - лежит в начале очереди и таким образом поиск часто запрашиваемых данных происходит быстрее. Ну и вообще, там много хитростей, обеспечивающи тебе наиболее быстрый и комфортный доступ к данным.
> Можо ли как-то, на c#, на серверной стороне, реализовать базу данных на файлах,
Можно. Другое дело что если ты будешь постоянно держать в памяти какой-то здоровый кусок данных, допустим базу данных пользователей - твое приложение будет жрать кучу ресурсов, а если не будешь, у тебя будут постоянные обращения к диску, что медленно. Опять же, придется заморачиваться с доступом к этим файлам, допустим, вот тебе из 10 потоков нужно почитать и 2 потока хотят писать, это довольно заебисто на самом деле, особенно на больших файлах.
Опять же, почти все СУБД сейчас позволяют вынести себя на отдельный сервер, что позволяет строить более гибкие системы, т.к. можно замутить кластер серверов для данных, кластер серверов для твоего приложения, в случае если что-то из этого упадет, клиент и не заметит, в случае же с обычным файлом ты заебешься все это как-то синхронизировать, а если таки начнешь пытаться, то так или иначе придешь к концепции СУБД, независимо от того будет ли это реляционная, документоориентированная или какая-то еще.
конечно можно. только вот потом понадобится поиск в этих файлах, транзакционное обновление, частичное обновление чтобы не перезаписывать весь файл, разделение на файлы и управление ими, файлы индексы
и ты напишешь кучу кода которое будет это делать -и тем самым ты создашь примитивный движок субд
а потом плюнешь и заменишь на готовый
Ну вот смотрите, есть задача - сделать простую регистрацию-авторизацию пользователей на сервере с#,
чтобы у каждого юзера был свой аккаунт, и счет внутри аккаунта, чтобы он мог пополнять его
(или зарабатывать деньги на аккаунт, например вводя каптчу),
дальше, за деньги на аккаунте - заказывать какую-то услугу и что-то получать за эту услугу,
и выводить остаток - себе на счёт, оформляя заявку.
Самое простое, что приходит в голову, это сделать файл:
>admin;hash(adminPassword);
>user1; (hash(user1Password) XOR hash(adminPassword)); (hash(controlQuestionUser1) XOR hash(adminPassword))
>user2; (hash(user2Password) XOR hash(adminPassword)); (hash(controlQuestionUser2) XOR hash(adminPassword))
>user3; (hash(user3Password) XOR hash(adminPassword)); (hash(controlQuestionUser3) XOR hash(adminPassword))
>...
где user1 - логин юзера,
user1Password - пароль юзера (передающийся по открытому каналу, кстати, отчего его могут стырить),
hash(user1Password) - хэш пароля для хранения, чтобы его не стырили из базы если чо,
(hash(user1Password) XOR hash(adminPassword)) - поскоренные хешы, чтобы не подобрали пароль брут-форсом, или радужными таблицами,
(hash(controlQuestionUser1) XOR hash(adminPassword)) - то же самое, но только с контрольным вопросом, позволяющим восстановить пароль.
Это, как-бы, одна таблица. При числе юзеров в 1000000, файл будет достаточно велик, и грузится сразу.
Поэтому, сразу, появляется идея - создать 1000000 файлов для каждого юзера, чтобы обеспечить к записям произвольный доступ.
Дальше, вторая таблица, уже как-бы вяжется к нику юзера:
user1; balance; pending_balance; available_balance
user2; balance; pending_balance; available_balance
user3; balance; pending_balance; available_balance
Это балансы разных юзеров;
balance - суммарный баланс;
pending_balance - баланс, который надо выплатить юзеру,
available_balance - баланс, которым он может распоряжаться.
Дальше, pending_balance - ещё таблица:
user1; witdrawOrderID; amount; whereToPay; status
user1; witdrawOrderID; amount; whereToPay; status
user1; witdrawOrderID; amount; whereToPay; status
Короче, блядь, ебическая куча таблиц, которую, может быть нужно будет - ещё и расширить.
Можно как-то без СУБД всю эту хуйню заебенить, чтобы не пердолится с её настройкой и установкой?
Я гляжу там только проприетарные лицензии, именно это и отталкивает, блядь.
Ну... Или... Подскажите что-ли, норм СУБД, для .NET Core 2.0, чтобы open-source она была.
Ну вот смотрите, есть задача - сделать простую регистрацию-авторизацию пользователей на сервере с#,
чтобы у каждого юзера был свой аккаунт, и счет внутри аккаунта, чтобы он мог пополнять его
(или зарабатывать деньги на аккаунт, например вводя каптчу),
дальше, за деньги на аккаунте - заказывать какую-то услугу и что-то получать за эту услугу,
и выводить остаток - себе на счёт, оформляя заявку.
Самое простое, что приходит в голову, это сделать файл:
>admin;hash(adminPassword);
>user1; (hash(user1Password) XOR hash(adminPassword)); (hash(controlQuestionUser1) XOR hash(adminPassword))
>user2; (hash(user2Password) XOR hash(adminPassword)); (hash(controlQuestionUser2) XOR hash(adminPassword))
>user3; (hash(user3Password) XOR hash(adminPassword)); (hash(controlQuestionUser3) XOR hash(adminPassword))
>...
где user1 - логин юзера,
user1Password - пароль юзера (передающийся по открытому каналу, кстати, отчего его могут стырить),
hash(user1Password) - хэш пароля для хранения, чтобы его не стырили из базы если чо,
(hash(user1Password) XOR hash(adminPassword)) - поскоренные хешы, чтобы не подобрали пароль брут-форсом, или радужными таблицами,
(hash(controlQuestionUser1) XOR hash(adminPassword)) - то же самое, но только с контрольным вопросом, позволяющим восстановить пароль.
Это, как-бы, одна таблица. При числе юзеров в 1000000, файл будет достаточно велик, и грузится сразу.
Поэтому, сразу, появляется идея - создать 1000000 файлов для каждого юзера, чтобы обеспечить к записям произвольный доступ.
Дальше, вторая таблица, уже как-бы вяжется к нику юзера:
user1; balance; pending_balance; available_balance
user2; balance; pending_balance; available_balance
user3; balance; pending_balance; available_balance
Это балансы разных юзеров;
balance - суммарный баланс;
pending_balance - баланс, который надо выплатить юзеру,
available_balance - баланс, которым он может распоряжаться.
Дальше, pending_balance - ещё таблица:
user1; witdrawOrderID; amount; whereToPay; status
user1; witdrawOrderID; amount; whereToPay; status
user1; witdrawOrderID; amount; whereToPay; status
Короче, блядь, ебическая куча таблиц, которую, может быть нужно будет - ещё и расширить.
Можно как-то без СУБД всю эту хуйню заебенить, чтобы не пердолится с её настройкой и установкой?
Я гляжу там только проприетарные лицензии, именно это и отталкивает, блядь.
Ну... Или... Подскажите что-ли, норм СУБД, для .NET Core 2.0, чтобы open-source она была.
>При числе юзеров в 1000000, файл будет достаточно велик, и грузится сразу.
держать все в памяти? зачем?
А вообще очевидно что нужно будет делать выборку по пользователю и если не держать все в памяти, то мудрить индекс по файлу
проще уж sqlite взять в котором тот же файл с готовым этим
ПостгреСКЛ бесплатная, МССКЛ урезанная бесплатная. Можно использовать не реляционную базу данных типа МонгоДБ или Файрбейз у которых есть бесплатные версии с ограниченным объемом хранимых данных.
А каким именно? Литературу подвезёшь?
Я же сам писать собрался функционал СУБД, разве это не очевидно?
>>880700
>держать все в памяти? зачем?
Потому что - один файл: https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Database/PostDb.cs#L36
>А вообще очевидно что нужно будет делать выборку по пользователю и если не держать все в памяти, то мудрить индекс по файлу
Впрочем, индекс уже есть:
https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Database/PostDb.cs#L28
и диффы:
https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Database/PostDb.cs#L29
>проще уж sqlite взять в котором тот же файл с готовым этим
>>880708
>ПостгреСКЛ бесплатная, МССКЛ урезанная бесплатная.
>Можно использовать не реляционную базу данных типа МонгоДБ
>или Файрбейз у которых есть бесплатные версии с ограниченным объемом хранимых данных.
Вообще, база наноборды, не очень годная,
но не хотелось бы, всякие копирастические зонды,
в неуязвимую и неубиваемую - нанобордочку впиливать.
Вдруг захакают базу данных через бекдоры?
Нахуй, нахуй, лучше уж свой движок СУБД впилить, зато опенсорцный,
c минимальными функциями, чтобы без зависимостей...
К тому же и несно, всё это, оно разве заработает на .NET Framework 4.0?
В саму наноборду, я не хотел бы базу прикручивать, (и так всё работает, вроде).
Но я хотел бы - отдельный проект заебенить, или даже несколько.
А как работает эта ебучая база - так понять и не могу, блядь. Пиздец просто.
SQL, выборки, какие-то сервера, кластеры, подключения, TLS, пиздец - каша в голове после этого.
80 вкладок в браузере открыл, пытаясь вкатиться в эту поебнятину, всё пересмотрел,
нихуя не понял и закрыл всё нахуй.
То что я описал выше, с таблицами для юзеров - это я хочу сделать faucet,
для раздачи крипты за решения каптчи.
А то сидят куча людей, без работы, скучают, делать нехуй, последний хуй без соли доедают,
а так хоть можно будет - каптчу повводить, и крипту получить.
Ещё, хотелось бы заебенить сервис для продажи пасскодов, как на двоще,
и юзать решённые каптчи наборды там.
Конечно я вижу это как два РАЗНЫХ сайта, или даже, быть может - один, но там, очевидно,
нужна регистрация и авторизация, и эти вот таблицы ебучие, и база данных, и СУБД,
и хуй знает как это всё впилить - пиздец просто. Сплошной пердолинг какой-то, ебать.
А каким именно? Литературу подвезёшь?
Я же сам писать собрался функционал СУБД, разве это не очевидно?
>>880700
>держать все в памяти? зачем?
Потому что - один файл: https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Database/PostDb.cs#L36
>А вообще очевидно что нужно будет делать выборку по пользователю и если не держать все в памяти, то мудрить индекс по файлу
Впрочем, индекс уже есть:
https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Database/PostDb.cs#L28
и диффы:
https://github.com/username1565/nanoboard/blob/8f0edd8d02b9f680f7ce1f70ddd29b8f7c367110/nanodb.exe-source/Database/PostDb.cs#L29
>проще уж sqlite взять в котором тот же файл с готовым этим
>>880708
>ПостгреСКЛ бесплатная, МССКЛ урезанная бесплатная.
>Можно использовать не реляционную базу данных типа МонгоДБ
>или Файрбейз у которых есть бесплатные версии с ограниченным объемом хранимых данных.
Вообще, база наноборды, не очень годная,
но не хотелось бы, всякие копирастические зонды,
в неуязвимую и неубиваемую - нанобордочку впиливать.
Вдруг захакают базу данных через бекдоры?
Нахуй, нахуй, лучше уж свой движок СУБД впилить, зато опенсорцный,
c минимальными функциями, чтобы без зависимостей...
К тому же и несно, всё это, оно разве заработает на .NET Framework 4.0?
В саму наноборду, я не хотел бы базу прикручивать, (и так всё работает, вроде).
Но я хотел бы - отдельный проект заебенить, или даже несколько.
А как работает эта ебучая база - так понять и не могу, блядь. Пиздец просто.
SQL, выборки, какие-то сервера, кластеры, подключения, TLS, пиздец - каша в голове после этого.
80 вкладок в браузере открыл, пытаясь вкатиться в эту поебнятину, всё пересмотрел,
нихуя не понял и закрыл всё нахуй.
То что я описал выше, с таблицами для юзеров - это я хочу сделать faucet,
для раздачи крипты за решения каптчи.
А то сидят куча людей, без работы, скучают, делать нехуй, последний хуй без соли доедают,
а так хоть можно будет - каптчу повводить, и крипту получить.
Ещё, хотелось бы заебенить сервис для продажи пасскодов, как на двоще,
и юзать решённые каптчи наборды там.
Конечно я вижу это как два РАЗНЫХ сайта, или даже, быть может - один, но там, очевидно,
нужна регистрация и авторизация, и эти вот таблицы ебучие, и база данных, и СУБД,
и хуй знает как это всё впилить - пиздец просто. Сплошной пердолинг какой-то, ебать.
нет такого понятия
ряд реляционных бд представлен через унифицированный подход ADO.NET
если хочется ORM, то тут уже выбор поменьше и зависит от ORM
Ну а если NOSQL то там каждый предоставляет свой подход и понятия "наиболее интегрирован" просто нет
>Потому что - один файл:
потому что один файл что? Я так и не понял. sqlite/firebird тоже один файл и что - они полноценные бд. Куча NoSql тоже представлены одним файлом базы данных
или о чем это ты
ну а если тебе хочется написать свое (ну может спортивный интерес) то это другое дело
Ну не верю я что нельзя понять как использовать бд, но при этом умудриться написать свою.
>потому что один файл что?
Я же ссылку на код вбросил, там и посмотри как он пишется этот файл. Там тупо данные в файле, и отдельно - файл со смещениями, где эти данные лежат.
Смещеня - целиком, грузится в память, при загрузке nanodb.exe.
Так вот, если табличку юзеров и паролей - заебенить в один файл, он же тоже будет грузится в память целиком. Иначе, придётся создавать файл смещений, и опять же, целиком -грузить смещения для записей в основном файле.
Это я хотел сказать, когда писал "потому что файл один".
Когда файл один, он в память целиком так и грузится, даже если записей там будет лярда полтора.
>ну а если тебе хочется написать свое (ну может спортивный интерес) то это другое дело
Именно. Изначальный вопрос, был о том, как с нуля реализовать минимальную СУБД, и БД, желательно - в виде файлов. Именно с нуля.
Короче, реквестировалась годная инфа, чтобы вкатиться в сами "Основы СУБД".
>Ну не верю я что нельзя понять как использовать бд, но при этом умудриться написать свою.
Да мне не особо нужен весь функционал СУБД, и БД, как таковая.
Просто, блядь, таблички эти ебучие, надо же как-то грамотно схоронять и ориентироваться по ним. Вот и всё. Если это можно сделать в пару строк кода, нахуй тогда инклюдить СУБД с этими ихними нечитабельными файлами баз данных, которые ещё и задамажится могут от одного лишь бед-сектора, и которые имеют проприетарный копирастический говнокод, коммерческий, и наверняка, обфусцированный вместе с дырами (бекдорами), вирями и троянами. А одни только SQL-инекции чего стоят. И всё это говно - пхнуть заместь такой опенсорцной няшки, как 0.db3, которая на нанобородчке? Ну нахуй. Понял, да?
>и опять же, целиком -грузить смещения для записей в основном файле.
Ну для тех кто хранит индекс в виде плоского списка - для них да.
>А одни только SQL-инекции чего стоят
ничего не стоят. в шарпе изначально был инструментарий их избежать. это вам не пхп. И кто хоть немного соображал, тот избегал.
>этими ихними нечитабельными файлами баз данных
писать свой код для чтения данных чужой базы данных напрямую вместо чтения средствами самой бд (который суть тот же функционал и оптимизирован по самое) - это как бэ ну эта....
>пхнуть заместь такой опенсорцной няшки, как 0.db3, которая на нанобородчке? Ну нахуй. Понял, да?
а вот это непробиваемый аргумент. Нечего возразить.
но я лучше sqlite возьму при таких требованиях, ну или LiteDB
>но я лучше sqlite возьму при таких требованиях, ну или LiteDB
А они пойдут на .NET Framework 3.5 или на .NET Core 2.0, или не, и придётся таки свою "базу" пилить?
Если планируешь работать в нормальных конторах конечно там требования повыше, а так каждый дрочет как он хочет.
LiteDB - отпадает, блядь.
https://github.com/mbdavid/LiteDB/blob/fcffb6919de9b279c811a031e5d71641a170a9da/LiteDB/LiteDB.csproj#L4
Минимальные требования - .NET Framework 4.5
><TargetFrameworks>net45;netstandard1.3;netstandard2.0</TargetFrameworks>
>писать свой код для чтения данных чужой базы данных напрямую вместо чтения средствами самой бд (который суть тот же функционал и оптимизирован по самое) - это как бэ ну эта....
Я так и не понял, вообще, чисто в теории, можно полностью заменить весь этот ебический функционал СУБД,
каким-то универсальным набором чисто файловых операций, и вместо базы,
и таблиц в ней, и записей в этих таблицах - попросту хранить ебическую кучу файлов, и папок,
где каждый файл - запись из какой-либо таблицы?
Насколько я понимаю, файловая система - это же и есть БД, не?
Только как оно всё работает, на принципах "концепции СУБД" - я не ебу,
просто потому, что я в душЕ не деру, что такое ваще эти грёбанные СУБД.
Я правда надеюсь что ты просто троль. Читая тебя начинаешь думать что в дурдом завезли интернет...
Это не ответ. Если SQLite тоже не станет на .NET Framework 4.0, то придётся пилить свой велосипед.
Написал пачку Unit Tests они каждый раз все бегают.
А можно как то часть из них отключить? Ну что бы выполнялись только первые 2 а остальные не прогонялись. Использую VS 2019.
Моно теперь часть .NET 5, пусть на него переходит.
А так то можно любые библиотеки друг с другом дружить. Тут у людей есть C# -> Java -> C++ -> C# -> C++ цепочки. Зависит от креативности.
Можно, разрешаю.
Для юнит тестов есть куча разных библиотек, читай доку как это делать конкретно в твоей библиотеке. А так они все это поддерживают.
Через extension methods же.
А зачем. Это ж фломастеры.
В MVC у нас контроллер, который принимает запрос, достает что нужно из базы и передает виду "вот тебе параметры - рендери". И вид на их основе рендерит. Ну еще и на основе того, что может сам достать - текущий запрос, сервисы...
В MVP у нас презентер, задача которого сформировать данные для рендера и вид рендерит используя презентер. То есть вид ЗНАЕТ про презентер и использует для рендера.
Тут сложно понять в чем разница, поэтому поясню на компонентах.
Фреймворки без компонентов это трэш и угар, но раз в asp.net core они есть - это сильно сглаживает разницу, но разница все равно есть.
Есть ViewComponent, которые суть виджеты. Им можно передать параметры и они себя рисуют.
В контексте MVP они точно такие же, но их создает не вид, а они существуют в контексте презентера.
если в MVC мы обязаны дотащить контекст от контроллера до виджета, то в MVP мы получаем уже готовый инстанс компонента, который был создан в контексте презентера.
То есть в "action" презентера мы достаем и работаем со всеми компонентами удобным кодом вида
GetComponent<Adblock>.SetIdentifier(...)
GetComponent<Paginator>.SetPage(total, current)
и в виде будут использованы не созданные Adblock, Paginator - а конкретно эти инстансы, которые вид попросит отрендерить себя.
Вид определяет местоположение компонента и вызов его рендерингОВ (в ViewComponent только один Invoke - неудобна)
без поддержки движка разница довольно фломастерная, ведь "всегда можно все передать".
Ну а если движок поддерживает, то некоторые плюшки сверху вида
- persistent свойства, которые автоматически прокидываются через запросы (урлбилдер знает про них и автоматом дописывает в GET, пока оно нужно)
- сигналы. пусть у нас таблица компонент и мы меняем сортировку с перегрузкой всей страницы. Презентеру срать на этот запрос - он вообще не в курсе ни про какую сортировку, он знает про компонент "таблица", а что внутри - его не парит. Сигнал дойдет до компонента и при этом "action" презентера также отработает. И страница будет перегружена, только компонент "таблица" пересортирует.
Потому что по факту его action не action, а рендер, хоть и выглядит идентично.
Но сила asp.net core в контейнере и возможности получить контекст
А значит те же сигналы легко делаются и в ViewComponent, ведь можно достать урл и получить с него нужный сигнал сортировки. Правда логически он оторван от котроллера, но это ж фломастер
И с прокидываем параметров можно накодить. Всегда все можно накодить
Это просто мне приятнее работать с компонентами, которыми я оперирую в презентере в виде нормальных вызовов методов и построения урла с учетом всех этих особенностей. Но мир привык к MVC
А зачем. Это ж фломастеры.
В MVC у нас контроллер, который принимает запрос, достает что нужно из базы и передает виду "вот тебе параметры - рендери". И вид на их основе рендерит. Ну еще и на основе того, что может сам достать - текущий запрос, сервисы...
В MVP у нас презентер, задача которого сформировать данные для рендера и вид рендерит используя презентер. То есть вид ЗНАЕТ про презентер и использует для рендера.
Тут сложно понять в чем разница, поэтому поясню на компонентах.
Фреймворки без компонентов это трэш и угар, но раз в asp.net core они есть - это сильно сглаживает разницу, но разница все равно есть.
Есть ViewComponent, которые суть виджеты. Им можно передать параметры и они себя рисуют.
В контексте MVP они точно такие же, но их создает не вид, а они существуют в контексте презентера.
если в MVC мы обязаны дотащить контекст от контроллера до виджета, то в MVP мы получаем уже готовый инстанс компонента, который был создан в контексте презентера.
То есть в "action" презентера мы достаем и работаем со всеми компонентами удобным кодом вида
GetComponent<Adblock>.SetIdentifier(...)
GetComponent<Paginator>.SetPage(total, current)
и в виде будут использованы не созданные Adblock, Paginator - а конкретно эти инстансы, которые вид попросит отрендерить себя.
Вид определяет местоположение компонента и вызов его рендерингОВ (в ViewComponent только один Invoke - неудобна)
без поддержки движка разница довольно фломастерная, ведь "всегда можно все передать".
Ну а если движок поддерживает, то некоторые плюшки сверху вида
- persistent свойства, которые автоматически прокидываются через запросы (урлбилдер знает про них и автоматом дописывает в GET, пока оно нужно)
- сигналы. пусть у нас таблица компонент и мы меняем сортировку с перегрузкой всей страницы. Презентеру срать на этот запрос - он вообще не в курсе ни про какую сортировку, он знает про компонент "таблица", а что внутри - его не парит. Сигнал дойдет до компонента и при этом "action" презентера также отработает. И страница будет перегружена, только компонент "таблица" пересортирует.
Потому что по факту его action не action, а рендер, хоть и выглядит идентично.
Но сила asp.net core в контейнере и возможности получить контекст
А значит те же сигналы легко делаются и в ViewComponent, ведь можно достать урл и получить с него нужный сигнал сортировки. Правда логически он оторван от котроллера, но это ж фломастер
И с прокидываем параметров можно накодить. Всегда все можно накодить
Это просто мне приятнее работать с компонентами, которыми я оперирую в презентере в виде нормальных вызовов методов и построения урла с учетом всех этих особенностей. Но мир привык к MVC
http://system.data.sqlite.org/index.html/doc/trunk/www/faq.wiki#q5
>there are legacy NuGet packages for backwards compatibility
Тебя в гугле забанили?
О ништяк ) Буду искать а то что то даже не знал где искать
Продебажил, на этом остановился, функции не выполняет, это в классе Form1 дальнейший код писать или всё же как-то заставить его можно дальше работать?
Код синхронно выполняется. Вызываешь один метод и всё что ниже отработает только когда этот метод вернёт управление вызвавшему его коду. Эпликейшн, не эпликшн, разницы нет.
Какое-то мучение, и где код писать, основную логику? У меня логика была в статическом классе, форму делать статической это ещё куча проблем с наследованием и прочим. Хочу лейбл изменить, во время увеличения таймера, но постоянно какая-то с этим беда, сначала думал экземпляр формы создавать, но тогда в бесконечный цикл уходил, делал публичным, статическим и т.д... вообще жуть какая-то.
Извините за столь очевидные вопросы, просто сгорел уже.
И больше нигде, а MVC пригодится если для веба будешь писать, поэтому не вижу смысла учить то, что нигде кроме винформс не пригодится.
Двачую
>>881527
>И больше нигде,
Ага, ну раз ты сказал что больше нигде. Он сплош и рядом в мобайле используется, только все равно, использование хуй пойми где это не аргумент за выбор чего-либо
>>881527
>пригодится если для веба будешь писать, поэтому не вижу смысла учить то,
Мои соболезования если тебе их приходится учить
Спрашивают про стек использованных технологий, а я не понимаю какие там технологии использовались. Asp net ли там, entity framework ли, sql или mysql. Как это определить?
Посмотри все csproj файлы, там описаны все установленые зависимости для проекта.
У тебя на диске файл есть с расширением .csproj. В него глянь, можно сюда скрин кинуть.
справа ты загородил всё классами.. ну вижу что у тебя MVC aspnetcore, субд попробую в конфиге посмотреть
Я просто сам в шарпе нубас, раз никто не отвечает пытаюсь помочь.
Короче, вот статья как подключается, в нугет пакетах надо посмотреть установлен энтити фреймворк, ну и вообще чекни что в статье написано.
https://metanit.com/sharp/entityframeworkcore/1.3.php
Ебические силы. Ты не в шарпе нубас, ты в принципе с компом на Вы. Я тебя попросил файл открыть. Файл блядь. В текстовом редакторе. Просто открой контент файла. Делается в 1 секунду на любом компе.
Читаю я тут статью в стиле "Геттеры/сеттеры - зло" и немножко переосмысляю свое существование.
Однако один вопрос все еще стоит ребром.
К примеру, у нас есть класс Dog, конструктор которого принимает на вход вес собакена, т.е.:
Dog dog = new Dog(10);
Получить вес собакена я могу как:
int dogWeight = dog.weight;
Console.WriteLine(dogWeight.ToString()) выдаст 10.
Но собакен со временем набирает вес.
Предположим, после выполнения метода dog1.eat() собака поправилась на 1 кг. Поскольку dogWeight - переменная, ссылающаяся на поле класса, она автоматически становится равной предыдущему весу + 1, а вызов Console.WriteLine(dogWeight.ToString()) выдаст 11.
То есть предыдущее состояние не запомнилось. А мне в будущем нужно работать с историей веса собакена. Как быть? Неужто все-таки использовать геттер? Итого:
Dog dog = new Dog(10);
int dogWeight0 = dog.getWeight();
dog.eat();
int dogWeight1 = dog.getWeight();
Или есть иной способ?
Ну т. е. у тебя знаний на уровне "1 час изучаю язык", а ты уже какой-то бред в стиле "Геттеры/сеттеры - зло" читаешь? В очередной раз убеждаюсь, что маняме в посте это маркер умственно отсталого.
>dogWeight - переменная, ссылающаяся на поле класса
Она не ссылается на поле класса, она хранит в себе значение типа int.
>становится равной предыдущему весу + 1
Не становится, она так и будет хранить в себе значение 10, если ты не перезапишешь значение этой переменной.
Ррррррррр.
Ну что? У меня не получается повторить, но я абсолютно точно уверен, что видел такую хуйню. Переменная менялась сама, когда менялись данные класса, на которые она ссылалась.
Самое главное, при чем тут нахуй геттер? Я вообще не понял какое он имеет отношение к
> То есть предыдущее состояние не запомнилось. А мне в будущем нужно работать с историей веса собакена. Как быть
Тут хоть с геттером, хоть без - предыдущее состояние не запомнится само по себе
Но я сегодня добрый, потому вот тебе сразу вариант без геттера
Метод eat в конце просто вызывает событие WeightChanged(Dog sender, EventArgs e), в аргументах можешь хранить дельту относительно старого значения, можешь отправлять старое и новое значение и т.д.
А вообще, ты какую-то хуйню прочитал.
Что я сделал. Я сделал синглтончик который некая уродливая помесь медиатора и обсервера. Я в своем репозитории передаю этого монстра, в нем есть метод Notify, когда мой ЮнитОфВорк коммитит успешно изменения, в хабе я подписался на событие этого монстра и рассылаю клиентам уведомление.
Суть, мне кажется что это какая-то залупа, не нравится, короче мне как оно выглядит, особенно мне не нравится то что из-за того что хабы - короткоживущие - мне приходится вручную отписываться в методе Dispose от этого нотифаера, чтобы не было ObjectDisposedException. Есть ли более элегантый способ в реальном времени актуальную инофрмацию из базы клиенту предоставлять? Или все так делают и в этом ничего такого нет?
Переменная никогда сама не меняется, таблетки уже выпей, манямедитё.
Ну так ты бы хоть проверил для начала, происходит то о чём ты спрашиваешь или нет.
В шарпе есть типы-ссылки (reference types) и типы-значения (value types). Все примитивные типы (int, double, char, bool, и т.д.) являются типами-значениями, т.е. они хранят в себе само значение, а не ссылку на объект.
По-моему вообще не существует ни одного языка, где int не был бы простым значением.
В петухоне все значения ссылочные, просто какие-то из них иммутабельны, а какие-то нет. Иммутабельны те которые в других языках являются значимыми типами.
Суть в том, что в данном случае тип данных не имеет значения. Переменная всегда будет иметь то значение, которое ей присвоили, независимо от типа этого значения. Если это ссылка на объекта, то она этой ссылкой на объект и останется, независимо от того что ты с этим объектом делать будешь.
Да, залупа. Надо учить паттерны проектирования. Без них тут только готовое решение поможет. На пальцах будет несколько месяцев объяснять.
Один миллион и один способ. Это вопрос вида: как увидеть дерево? Просто ответ - возьми да увидь. Но потом добавляется, что чувак находится в пустыне, в катакомбах под песком, и вообще у него нет глаз. А через время выясняется что вместо глаз у него электронные визоры, в которые по идее можно было бы загрузить изображение дерева и наебнуть систему.
Чё я хочу сказать - если хочешь помощи, то оформляй вопрос правильно, с деталями, скриншотами, что пробовал, какие результаты получил. или иди нахуй
Всё, нашёл: https://devpractice.ru/sqlite-c/
Там исходник, ссылки на пре-компиленные dll-ки, и вся хуйня.
Ебать меня разворотило, здесь, от этих неведомых СУБД.
sqlite - не субд, а просто бд. Это файлик в особом формате. И к нему на разных языках поставляется провайдер, который знает как этот файлик читать.
Бля, там прекомпиленная либа на гитхабе, а сорца нет чтобы её собрать. Хз как её сбилдить, и где этот долбанный сорц.
>>882395
>sqlite - не субд, а просто бд. Это файлик в особом формате.
Как я понимаю, бд - это сами файлы базы данных, с данными.
>И к нему на разных языках поставляется провайдер, который знает как этот файлик читать.
Это та самая .dll-ка, с хуй знает какими бекдорами?
С её помощью можно создать, эту ебучую базу данных, и писать данные в неё, и читать их?
Вот эту всю хуйню как реализовать? https://www.google.ru/search?q=взаимосвязанные+таблиы+базы+данных
Чтобы не инклюдить неведомое, в опенсорцный проект, можно ли без баз данных этих и СУБД, вообще обойтись,
и просто хранить таблицы - хуй знает как, в JSON'е-файлах, штоле, отдельных, с каким-то ёба-уровнем организации,
так, чтобы не грузить весь JSON-файл, в память, а только то, что нужно?
Первое что приходит в голову - это куча папок, где каждая - имя таблицы,
и внутри них - тупо JSON-файлы, со значениями строчек таблиц, этих ебучих.
А уже через логику софтины, читающей и записывающей, всю эту залупу,
всю эту хуйню взаимосвязывать, и извлекать и писать что надо, и искать, и делать выборки.
Тупо минимальный функционал.
Нахуй мне вся СУБД от хуй знает какой корпорации, которая корпоративные хуйни корпоративизирует,
и где какой-нибудь файл setup.exe весит 500 мегабайт, и содержит хуеву кучу проприетарного обфусцированного говнокода, с троянами?
О, ебать. Я только что открыл для себя - файловую базу данных: https://habr.com/ru/post/16123/
Надо поколупать в этом направлении, бгггг
Если глянуть глубже, то согласно принципу однородности памяти, из принципов архитектуры Фон-Неймана в двоичном коде любой программы - команды и данные хранятся в одной памяти. Данные, можно рассматривать как базу данных, а команды - как СУБД, то есть логику работы с этой базой данных.
Установил Selenium и Nunit пакеты в VS.
Надо проинициализировать браузер зайти на сайт проверить статус поле поиска(isDisplayed, isEnabled) - получить значение методов.
Подскажите в каком nameSpace эти методы не могу их отобразить.
И еще когда пиши локатор не могу подтянуть класс BY и его методы для определения в чем соль?
А уже все нашел. СПС
Ну когда нужно подождать загрузки и т.д. метод Thread.Sleep() сказали использовать только в крайнем случае. Подскажите вариантов или примеров если можно.
Многопоточность? асинхронное вычисление? не?
>метод Thread.Sleep() сказали использовать только в крайнем случае
Долбоебы сказали.
Ты делаешь кастомный метод WaitPage(int timeout=10), в котором пишешь цикл, ждущий конкретного результата. Если не находит, спит секунду и повторяет поиск. Находит — break и возвращает, что надо.
await Task.Delay(TimeSpan.FromSeconds(secondsToWait));
У нас сессия в январе, но сдачи у нас еще в ноябре начались
Может прогер, считающимся Джуном в России, найти там работу?
В европе требование ниже, меня взяли в тим на фронтенд на первом курсе просто потому что я умел работать с пиратским фотошопом и верстать на хтмлке, в дотнет я уже попал на взрослую должность с опытом програмирования, но вообще без опыта в .net, в сша из того что я знаю требования еще ниже, что тут говорить когда там даже индусы пользуются спросом...
this возвращает экземпляр AbilityWalk, а не AbilityInput
Ладно, тогда буду переопределять инпут для каждого конкретного случая. Дальше так всё равно будет удобнее, хоть и кода больше.
Значит требования как минимум не ниже?
Можете посмотреть, и сориентировать насколько верно реализовал, и где херня если неверно.
namespace SomeNamespace {
public class SomeClass : global::SomeOtherClass {
protected void Some_Page_Load(object sender, EventArgs e) {
# Eval("onlineId")
# Eval("GUID")
# Eval("onlineAccess")
}
}
}
Ну или херня как и прошлый пример.
Ожидание загрузки страницы делается на фронте, не? Зачем ты бэкенд спать отправляешь?
От конторы зависит. Были как лёгкие так и жёсткие собеседования и там и там.
Для тестов пойдёт. Вообще можно сделать сам класс статичным и добавить приватный статичный конструктор, в котором будет инициализация.
И в кострукторе можно через Null объединение ебануть проверку и если что инициализацию?
Ну мне нужно для написания тестов UI что бы страница загрузилась и можно было дойти до всех элементов.
Ты в курсе, что Селениум по умолчанию ждет, пока страница не загрузится? Отследить это можно по спиннеру, который крутится на месте фавиконки сайта. Пока он крутится - Селениум ничего не предпринимает. Докрутился - начинает искать элементы.
Теперь знаю.
Ну у меня не просто тесты. У меня ещё на F# пишется генератор рандомных данных для проекта + много математики.
Спасибо.
Я писал простой примитивный код для работы с бд, на уровне dbContext.SaveChange()/tableName.ToList() , но при полугиговой бдшке, простая форма для админки с энтитей сожрала у меня 3-4гб озу и это не смешно =[ . Раз в пару минут приезжает GC и просто уполовинивает занимаемую память, но это все равно пиздец. На форме конечно datagridview для просмотра, за него я знаю, к нему нужно прикрутить воннаби paging, с ним я разберусь.
А еще, дело в том что я работаю с шифрованием и потому на каждую таблицу делаю дополнительный класс-прослойку для корректного отображения в датагриде. Там расшифровка данных + небольшая логика преобразований данных из базы для нормального отображения. +Изменение данных происходит не при помощи датагрида, а посему мне бы вообще данные в контексте не хранить если так можно.
Можно.
contex.Set<T>().FromSqlRaw("Select zalupa from Pizda")
Но вообще, раз уж тебе не нужен EF - выпили его нахуй, возьми, например, даппер. Если писал все по-уму, тебе просто нужно будет заменить провайдера и чутка попроваить репозитории. Привет всем кто кричал что не нужно делать репозитории и юнит оф ворк, когда EF юзаешь.
Привет.
>>882857
Полная херня уровня детский сад.
Используй https://docs.microsoft.com/ru-ru/dotnet/api/system.lazy-1 и не еби мозги.
Есть определенный Test-case.
Его нужно прогнать для Chrome и FireFox.
Возможно ли как то сделать так что бы не писать два теста под каждый браузер. Или нужно реализовывать тест для каждого браузера?
Что будет если два потока одновременно войдут в GetChromeObject когда _crome - еще null?
Короче, классическая проблема для синглтона.
Ну и да, нахуя тебе Get в свойстве? Убери.
Если ты именно тестер и ты просто с "драйверами" работаешь, которые никаких общех интерфейсов не имеют - два тестовых. Если есть интерфейсы - используй их. Если ты разработчик - добавь интерфейсы и потом при тестировании используй их.
Твой ментор - долбоеб. Требуй деньги взад.
Еще раз: Что блядь будет, если из двух потоков обратятся к твоему классу, до того как инициализирован? Либо делай синглтон на основе Lazy либо - после проверки на null - ебани lock там делай еще одну проверку на null и уже там создавай создавай экземпляр.
И переименуй GetChrome. Get подразумевает что это метод. А у тебя свойство. Это вводит в заблуждение. Раз у тебя синглтон, то называй это Instance, оно понятно и все кто знают что такое синглтон - поймут что вернет это свойство.
Тест на беременность? Зависит от того чем ты пользовался когда эти тесты писал.
Или переходи на Dapper, или выключай EntityTracking при запросах и он не будет ничего кешить. Гугли, на stackoverflow всё есть.
А зачем такое сложное шифрование? Можно же всю БД или какие-то таблицы/колонки шифровать/дешифровать на уровне СУБД (зависит от твоей СУБД). Но даже Sqlite умеет целиком БД файл шифровать.
Что что, два раза инициализируют и дальше пойдут. Даже для Прода такое выкатывают в целях производительности (избежать локов/семафоров и очередей потоков). А для тестов вообще пофиг. Напишет несколько тестов, они начнут прогоняться паралелльно в разных потоках и он для себя решит - работает этот подход или нет.
>>883673
Приватный статичный конструктор сделает инициализацию при старте приложения. Не надо будет никаких проверок на нулл и всякие антоны перестанут бояться, что страшные потоки будут иметь твои переменные одновременно.
мимо
Ну типо метод который хотим переопределить помечаем виртуальным а переопределяймый метод пишем оверайд. Но нахуя? Я попробовал и без этих слов все работает. Просто что бы знать что мол этот метод мы переопределили или есть какой сакральный смысл?
> выключай EntityTracking
Спасибо, я уже выключил. Теперь хотя бы память не течет.
> Но даже Sqlite умеет целиком БД файл шифровать.
А вот с этого момента поподробнее? Как мне в шарп коде тогда с ней взаимодействовать?
https://stackoverflow.com/questions/12190672/can-i-password-encrypt-sqlite-database
Разные провайдеры делают шифрование по разному. Microsoft.Data.Sqlite и System.Data.SQLite должны по умолчанию шифровать БД, если ты в connection string укажешь пароль.
Или можно вручную их АПИ покопать http://www.hwaci.com/sw/sqlite/see.html
Ты ни черта не переопределил. То что ты видишь - сокрытие, причем неявное.
нахуй ты вообще нужен, если и без тебя всё работает?
Оно не работает ни у тебя ни у кого другого.
Я повторяю - ты просто сделал сокрытие. Это значит что при вызове из базового класса - будет вызван не метод этого класса, а тот что определен в базовом классе. Переопределение - это когда при вызове через базовый класс будет вызван переопределенный метод, если такой имеется.
Блядь, чтобы тебе понятно был. Смотри, допустим тебе нужно отрисовать контролл какой-то. Ты, блядь, не знаешь какой контролл будешь рисовать, и ты не хочешь думать о том что тебе придет: кнопка, лейбл, текст или вообще TreeView, ты просто знаешь что у всех контроллов есть виртуальный метод Draw, твой класс, допустим, занимается тем что выставляет все контроллы по сетке, ты хочешь просто расставить их по этой сетке, а думать о том как они рисоваться будут - должен тот кто эти контроллы писал. Так вот, если он такой же еблан как и ты и не сделал базовый метод виртуальным, а методы не переопределил - после того как ты вызовешь controll.Draw() у тебя получится ебанина, прийдет ПМ, ебнет тебя по голове палкой, и выгонит на мороз, когда ты будешь кричать что свою работу ты сделал - он пойдет к программисту что делал контроллы, а он как и ты будет пиздеть что у него-то все работает, в итоге вы оба на мороз отправились и сдохли; если он был не мудаком и все нормально переопределил - ты получишь нормально отрисованные контроллы, вы оба получили квартальные премии и ебете на корпаративе студенток-практиканток, которые решили вкатиться в ОйТи.
И на будущие, шизойд, пользуйся пастебином или тут так поведено код скриншотами кидать?
шизоид - это ты, в пэйстбин кидают, чтобы можно было с кодом поиграть, тут же надо быстро продемонстрировать результат небольшого куска кода, скрин быстрее всего. Ты сука вообще ни одного примера не привёл, как оно там у тебя работает, а хочешь чтобы люди тебе ещё дополнительные телодвижения делали.
Я не этот шизик, у которого "все работает же", но из твоей стены текста действительно нифига не понятно, кроме части про студенток.
Не ну вот щас понятно по скрину зачем это надо. Но возникает вопрос зачем создавать объект одного типа и передать его в переменную другого типа? Какие профиты?
Вроде погуглил, не нашёл подходящих.
Что ты не понял, дурик? Есть у тебя BaseClass, есть DerivedClass который унаследован от BaseClass, есть у тебя метод который принимает BaseClass, на пикриле различия в поведении. При этом метод без override может иметь любую сигнатуру.
Конечно, легче вскукарекнуть что ООП нинужна и есть ничто иное как лишняя писанина, как это делает большинство неосиляторов.
Чего там непонятного? Ты можешь таким образом не думать о конкретном классе который тебе пришел.
Вот пример, метод SendMessage - он не знает как будет отправлено сообщение, его цель - создать сообщение и отослать, а как оно будет отослано - было определено сверху тем кто метод вызвал и передал туда отправителя. Есть два класса, которые переопределили метод SendMessage - таким образом, если в метод SendMessage прийдет класс, который переопределил метод - будет вызван именно переопределенный метод, вместо базового. Если бы не было переопределения, а использовалось сокрытие, чтобы вызвать отправку по СМС или по электронной почте, ты должен был бы проверить какой конкретно объект к тебе пришел и привести к нему, либо ебашить 2 метода, один для SMS другой для emal'ов.
Как инкрементные архивы, только датасорцы. Содержат добавочные данные, в том числе замену оригинальных данных, поскольку оригинальный датасет иммутабелен.
Я же не говорю что не нужно.
Вот к примеру разделение программы на объекты и работа с ними мне нравится. Типо Каждый класс отвечает за свои данные и ничего лишнего, каждый метод выполняет только 1 действие и все. Это ведь ООП?
Просто пару раз начинал писать мелкие программки и когда код переваливал за 200 строк и я хотел внести какие либо изменения то приходилось все писать заново. Но некоторые вещи мне все еще не понятны.
Например
Person tom = new Employee("Tom", "Microsoft");// Зачем мне это делать???
Вот где может понадобится на простом примере создавать объект и присваивать его переменной длругова класса?
>Чего там непонятного
Сложный код, перечисления лямбда выражения, я путаюсь. И еще пиздец как не привычно имя переменных когда начинается с _ я как вижу сразу пугаюсь и думаю шо это такое то метод или шо.
Тебе надо почитать классику.
ООП взят из природы, из наблюдения человека за природой. И именно на природе можно найти примеры ООП от самого Боженьки, кек.
Например.
Есть абстрактный класс "млекопитающие". Почему он абстрактен? Потому что все млекопитающие реализуются в реальности через дочерние классы, например, собака реализует класс "псовые", который унаследован от млекопитающих и обладают генерацией молока. Дельфины от класса "дельфиньи", так же наследемого от млекопитающих. Человеки - от "приматов", ну ты понел.
Для чего передавать собаку класса "псовые" в массив типа "млекопитающие"? Другого типа массив же, епт! Ну, догадался? Нет? Потому что у нас теперь есть возможность положить в один массив всех млекопитающих! Несмотря на то, что это собаки, люди, белки, обезьяны, медведи, дельфины! Они все могут быть помещены в обдин массив и специальный робот доильщик пройдёт по массиву и подоит всех! И собак, и кошек и людей.
>Типо Каждый класс отвечает за свои данные и ничего лишнего, каждый метод выполняет только 1 действие и все
Если на каждый случай создавать свой класс и методы, то вместо 10 строк тебе придётся писать 100 или больше, а потом ты во всей этой каше запутаешься.
Суть ООП в том, что ты выносишь всё общее в отдельные, основные классы, а всё конкретное в классы, которые будут передаваться в эти основные классы. Таким образом общий код ты будешь трогать редко, а в случае добавления какой-то конкретики, ты просто создаешь дополнительный класс с нужной логикой.
Создавать программу нужно мысля именно так, например, ты хочешь создать парсер двача, который отсеет все посты без прикрепленных файлов и оставит только файлы с каким-то контентом. Если применять ООП подход, то ты будешь делать парсер не для двача, а для сайта в котором есть сущности объединяющие несколько сообщений и сообщения двух видов - с медиа контентом и без.
Какие в этом плюсы? Плюсы в том, что код, который будет работать с сущностями объединяющими сообщения (в случае двача это треды) и непосредственно с сообщениями, можно будет использовать для любой другой борды, а конкретными будут только способы получения данных. Т. е. написал ты для двача, а для того чтобы тоже самое делать с 4chan'ом, krautchan'ом и другими бордами, тебе будет достаточно переписать те методы, которые отвечают за получение тредов и сообщений.
Минусы только в том, что тебе придётся тщательней обдумывать архитектуру и если опыта мало, то затратишь ты на это гораздо больше, чем на решение "в лоб".
При этом логика схожа не только с бордами, но и с форумами в которых есть темы и сообщения в этих темах, т. е. при хорошей архитектуре ты написанный код можешь применять не только для двача и борд, но и для форумов.
>Person tom = new Employee("Tom", "Microsoft");// Зачем мне это делать???
Так никто и не делает, частый случай это передача производного типа методу который принимает базовый тип, т. е. Person у тебя будет в сигнатуре метода, а инициализировать ты будешь Employee и использовать его в методе принимающем как Person, так и Employee.
>Типо Каждый класс отвечает за свои данные и ничего лишнего, каждый метод выполняет только 1 действие и все
Если на каждый случай создавать свой класс и методы, то вместо 10 строк тебе придётся писать 100 или больше, а потом ты во всей этой каше запутаешься.
Суть ООП в том, что ты выносишь всё общее в отдельные, основные классы, а всё конкретное в классы, которые будут передаваться в эти основные классы. Таким образом общий код ты будешь трогать редко, а в случае добавления какой-то конкретики, ты просто создаешь дополнительный класс с нужной логикой.
Создавать программу нужно мысля именно так, например, ты хочешь создать парсер двача, который отсеет все посты без прикрепленных файлов и оставит только файлы с каким-то контентом. Если применять ООП подход, то ты будешь делать парсер не для двача, а для сайта в котором есть сущности объединяющие несколько сообщений и сообщения двух видов - с медиа контентом и без.
Какие в этом плюсы? Плюсы в том, что код, который будет работать с сущностями объединяющими сообщения (в случае двача это треды) и непосредственно с сообщениями, можно будет использовать для любой другой борды, а конкретными будут только способы получения данных. Т. е. написал ты для двача, а для того чтобы тоже самое делать с 4chan'ом, krautchan'ом и другими бордами, тебе будет достаточно переписать те методы, которые отвечают за получение тредов и сообщений.
Минусы только в том, что тебе придётся тщательней обдумывать архитектуру и если опыта мало, то затратишь ты на это гораздо больше, чем на решение "в лоб".
При этом логика схожа не только с бордами, но и с форумами в которых есть темы и сообщения в этих темах, т. е. при хорошей архитектуре ты написанный код можешь применять не только для двача и борд, но и для форумов.
>Person tom = new Employee("Tom", "Microsoft");// Зачем мне это делать???
Так никто и не делает, частый случай это передача производного типа методу который принимает базовый тип, т. е. Person у тебя будет в сигнатуре метода, а инициализировать ты будешь Employee и использовать его в методе принимающем как Person, так и Employee.
Ну, сорян, я просто хотел чтобы на один экран уместилось.
Ладно, вот тебе пример на пастебине.
https://pastebin.com/dc3K0XtV
>ментор
Судя по тому что тебе сказали что это норм, то ты с курсов, при том люто говняных курсов, так как тема синглтона изи на того чтобы завалить человека на собесе.
А ты с таким кодом не то что провалил его, повезет если тебя в черный список не внесут.
Эта настолько старая и избитая тема что не знать ее признак абсолютного отсутствия опыта.
Тебе уже написали как делать и в интернете сотни статей почему именно так, а не как иначе.
>>883789
>Что что, два раза инициализируют и дальше пойдут.
Да, но существует шанс использования двух разных экземпляров на протяжении всей работы приложения без понимания что же тут не так. В нормальных конторах есть анализаторы которые помечают такой код как ERROR и за такое могут легко лишить премии, потому что это в будущем может сломать работу на месяцы.
>Даже для Прода такое выкатывают в целях производительности
В продакшене производительность это десятое место, а экономить на локах или lazy лютая глупость, цена настолько низкая что даже в гейм дизайне так можно делать не говоря уже о том что через лок там только 1 проверка дальше по факту будет, то есть ты экономишь один if не понятно зачем.
Твоё это бред про природу? Ты либо троллишь, либо сам от того кому объяснить пытаешься недалеко ушел. В хороших книгах про ООП первым делом предостерегают от того чтобы пытаться проецировать жизнь на код и искать что-то схожее.
Ну вот животные все в одном массиве и те которые cat a1 = new cat и те которые Animal a2 = new cat
И в чем разница то?
Так попробуй про ООП не из статей в интернете читать, а из полноценных книг. Начать можешь с Agile Principles, Patterns, and Practices in C# By Martin C. Robert, Martin Micah
Тогда перестанешь в этом видеть троллинг.
В данном случае нет разницы.
Но вот добавь классу Aminal метод MakeNoise() и сделай для cat - Console.WriteLine("mew"); для dog - Console.WriteLine("Woof"); и базовому классу Console.WriteLine("Animal noise"), а затем вызови это в своем foreach. Ты увидишь что без virtual-override - будешь видеть методы базового класса, вместо мяуканья и гавканья.
>Employee и использовать его в методе принимающем как Person, так и Employee.
Ну тогда зачем это надо если метод принимающий родительский класс может принимать и производные?
Я не понимаю профит этой конструкции.
Если инициализация синглтона не требует больших затрат, т. е. нет какого-то дорогого запроса к БД или чтение из файла и загрузка в память нескольких сотен мегабайт, то используй конструкцию вида Singleton, иначе Singleton1
Четко спасибо, более менее разобрался.
Вот теперь точно толстота. Жирнющий демагогический приём - отсылать в гугл за некими "настоящими шотландцами книгами".
Ну, ты описал кстати утопию. В реальности тебе дают неделю - ты должен сделать, иначе пизда, трындец, ПМ плачет, умоляет, а потом грозит уволить, а потому ты таки будешь вынужден ебануть изначально говнокод, который решит задачу здесь и сейчас, а все ООП начнется уже через 100 итераций этой хуйни, когда разгребать говно и костыли с велосипедами прийдут уже другие люди.
>Person tom = new Employee("Tom", "Microsoft");
Если tom передать в метод принимающий Person, то не будет проверки типа.
Если объявить так
>Employee tom = new Employee("Tom", "Microsoft");
И передать tom в метод принимающий Person, то сначала будет проверка типа и только потом работа метода.
Но, как я уже сказал, так мало кто делает в реальности, это просто неудачный пример от анона с двача.
Да не, в изначальном посте все верно написано. Примеры с природой это хуета для гуманитариев и школьников.
Не я не с курсов, сам учился всему этому поэтому так херово и выходит )
Всмысле проверка типа?
Я должегн сделать проверку? или компилятор будет ее делать и время тратить?
В чём демагогия, дурачок? В том что тебя отослали к источникам, которые разбираются в теме уж явно лучше тебя, долбоеба с двача, который высрал хуйню про природу?
Не хочешь развиваться, хорошо. Тогда вот тебе выдержки из книги которую я тебе посоветовал. Это из 20-ой главы , там как раз разбирается ситуация с которой сталкиваются идиоты вроде тебя, пытающиеся натянуть физический мир на логический.
Да, JIT компилятор будет проверять является ли объект tom наследником класса Person, если ты присвоил его переменной типа Employee, если он у тебя изначально присвоен переменной Person, то никаких проверок происходить не будет.
Просто в этом мало логики, потому что если ты собираешься передать этот объект, который ты присвоил переменной типа Person, в метод принимающий объект типа Employee, то тебе придётся явно приводить эту переменную к типу Employee. Если ты не собираешься этого делать, то зачем тогда вообще присваивать объект Employee типу Person?
> зачем тогда вообще присваивать объект Employee типу Person?
Чтобы в цикле обойти инстансы и вызвать метод, унаследованный от Person, не взирая на конкретные типы имеющихся инстансов.
>ткнули носом в обосранные штанишки
>У ТИБЯ БАМБИТ ТЫ ТРОЛЛИШЬ!!
Проиграл. Главное чтобы в следующий раз у тебя хватило сил признать свой обсер. Не делать этого на анонимной борде - хороший повод задуматься над своим психическим здоровьем.
Да, я вижу как у тебя нибамбит, токсик из тебя так и льётся. Я написал чётко по делу, ты пишешь хуйню, надеясь, что оппонент в неё поверит. Это типичный Reductio Ad Ignorantum. Просвещайся, пока я здесь.
>я написал
В этом твоя проблема. В твоей писанине не хватает ссылок на источники и литературу которыми ты руководствуешься. Да, сычуш, твоего "ятакскозал" не хватает, особенно на анонимной борде.
Они и так вызовутся если ты передашь Emplyoee в метод принимающий Person.
И присваивать объект Emplyoee переменной Person ради того чтобы избежать проверки типов в такой ситуации тоже не имеет смысла, потому что при вызове виртуального метода происходит проверка типа объекта.
>В продакшене производительность это десятое место
В больших конторах часто есть такое понятие как SLA, когда требуют чтобы при любой загрузке системы у пользователей не уходило больше 1-5 сек на операцию (полный рендеринг страницы например).
Для всяких сессий и токенов очень любят делать зашаренный объект, который по истечении срока жизни надо генерить заново. Тут два варианта - локать токен, обновлять в одном потоке, отпускать для использования остальными потоками. Когда загрузка серваков под 80%, такой лок может внезапно уехать под все 100% и серваки начнут кидать исключения или внезапно прыгать с 1 сек до 100 сек на отзыв. И тут можно словить увольнение и бан.
Для таких ситуаций можно позволить нескольким потокам переписать токен несколько раз и забыть про него на 30-60 минут.
Где взять сорец SQLite на C# и как сбилдить .dll-ки (какие?), на .NET Framework 4.0?
Спасибо, выглядит очень удобно. У меня теперь другой вопрос - у меня есть классы прослойки для отображения данных в датагриде. Т.е. грузятся данные из бд в этот класс, а в нем расшифровка и небольшая логика для отображения (например если в таком то поле null значит записать в строку "не существует"). Можно ли как-то вообще избавиться от этих классов для отображения и вынести куда-то вот эту логику для просмотра?
>>884340
В nuget'e?
мимо такой же долбаеб
Нугет притянет пакеты, которые создают дополнительные длл-ки, а я хочу всё вкомпилировать в один экзэшник.
И что вообще там происходит ?
Класс Testwith.....Browsers использует обобщенный тип данных TWebDriver, класс наследуется от TWebDriver, все остальное я хз сам еще не разобрался.
metanit.com/sharp/tutorial/3.12.php
Вот тут если шо читать.
Благодарю.
Класс Test... не наследуется ниоткуда; обобщённый тип TWebDriver имеет следующие generic type constraints:
1. реализует интерфейс IWebDriver
2. имеет публичный беспараметрный конструктор new()
>обобщённый тип TWebDriver
Вернее не обобщённый тип, а параметр типа. Обобщённый тип это TestWithMultipleBrowsers<TWebDriver>
К примеру я открываю файл "word.docx", и свойство SafeFileName возвращает мне только название и расширение файла, но не путь
Вопрос исчерпан
Это через локаторы как то можно дергнуть ? Или есть какой нибудь метод ?
регулярным выражением
Прикольно иногда заставить себя посмотреть на код глазами новичка. Когда только картинку твою открыл, вообще вопросов никаких не возникало. Всё на своих местах, всё просто, и даже не знаешь, тролят тебя или нет. А потом пытаешься представить что ты код в принципе в первый раз в жизни неделю назад увидел, и сразу появляется куча вопросов.
Зря ты с этого начал. Поучил бы основы с пол года сначала. Не важно даже на каком языке и фреймворке.
https://medium.com/javarevisited/9-free-c-c-sharp-courses-and-tutorials-for-beginners-and-intermediate-programmers-best-of-lot-dc8c793aab31
https://dusted.codes/dotnet-for-beginners
Пытаюсь сконпелировать SQLite из сореца на шарпе, чтобы получить портабельную СУБД опенсорцую.
1. Здесь: https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Нашёл (13 903 827 байт): https://system.data.sqlite.org/downloads/1.0.113.0/sqlite-netFx-full-source-1.0.113.0.zip
Пишут, что это сорец:
>This ZIP archive contains all current source code for System.Data.SQLite 1.0.113.0 (3.32.1)
>and the extra files needed to run the unit test suite, combined into a single archive file.
>(sha1: 57a4a873c839314d2adbf3e3c737fefa8fdff72e)
2. Хэш - совпадает (проверил MultiHasher 2.9 portable: 57A4A873C839314D2ADBF3E3C737FEFA8FDFF72E )
3. Unzip-нул архив WinRAR'ом. В распакованном виде, всё это добро - засрало мне вот столько байт (46 639 196 байт).
4. Что делать дальше и как получить DLL-ки, и какие - хуй знает. На Windows XP (x86), cтоит - Visual Studio 2010 Ultimate (.NET Framework 4.0).
5. Методом тыка, залез в папку sqlite-netFx-full-source-1.0.113.0\Setup, и вижу дохуя батников. Испугался и сразу закрыл нахуй.
6. Возвращаюсь назад, из папки Setup. Дабл клик по файлу SQLite.NET.2010.MSBuild.sln (потому что студия 2010)
Открывается студия, лезут ебучие варнинги.
7. Build -> Build Solution (656 Errors, 24 Warnings, блядь).
Все Errors при попытке кококонпеляции этой вот шляпы "System.Data.SQLite.EF6.2010", и вот этой залупы "testef6.2010".
Значит сорец не полный, блядь.
Вижу также, в папке sqlite-netFx-full-source-1.0.113.0\Externals какие-то пре-компиленные .dll-ки, значет сорец не опен, блядь.
8. Дальше, несмотря на варнинги и ерроры, кококонпеляция, вроде как прошла.
И теперь, где-то, здесь: \sqlite-netFx-full-source-1.0.113.0\obj\2010
я вижу кучу папок.
Среди них:
"\sqlite-netFx-full-source-1.0.113.0\obj\2010\Win32\DebugStatic\System.Data.SQLite.dll.intermediate.manifest"
"\sqlite-netFx-full-source-1.0.113.0\obj\2010\Win32\Debug\System.Data.SQLite.dll.intermediate.manifest"
"\sqlite-netFx-full-source-1.0.113.0\obj\2010\System.Data.SQLite.Linq.2010\Debug\System.Data.SQLite.Linq.dll"
"\sqlite-netFx-full-source-1.0.113.0\obj\2010\System.Data.SQLite.2010\Debug\System.Data.SQLite.dll"
9. Хуй знает достаточно ли этого, и будет ли оно работать, или придётся - опять переустанавливать шиндошс.
АААААААААА! Хочу сука СУБД заебатую, опенсорцную, чтобы из чистого сорца состояла, и чтобы была без троянов вшитых в говнокод.
Вот здесь, вроде, нашёл что-то попижже. https://github.com/moneymanagerex/System.Data.SQLite
там архив на целых 100 метрабайт, буду цацкаться с ним, кароче.
Пытаюсь сконпелировать SQLite из сореца на шарпе, чтобы получить портабельную СУБД опенсорцую.
1. Здесь: https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Нашёл (13 903 827 байт): https://system.data.sqlite.org/downloads/1.0.113.0/sqlite-netFx-full-source-1.0.113.0.zip
Пишут, что это сорец:
>This ZIP archive contains all current source code for System.Data.SQLite 1.0.113.0 (3.32.1)
>and the extra files needed to run the unit test suite, combined into a single archive file.
>(sha1: 57a4a873c839314d2adbf3e3c737fefa8fdff72e)
2. Хэш - совпадает (проверил MultiHasher 2.9 portable: 57A4A873C839314D2ADBF3E3C737FEFA8FDFF72E )
3. Unzip-нул архив WinRAR'ом. В распакованном виде, всё это добро - засрало мне вот столько байт (46 639 196 байт).
4. Что делать дальше и как получить DLL-ки, и какие - хуй знает. На Windows XP (x86), cтоит - Visual Studio 2010 Ultimate (.NET Framework 4.0).
5. Методом тыка, залез в папку sqlite-netFx-full-source-1.0.113.0\Setup, и вижу дохуя батников. Испугался и сразу закрыл нахуй.
6. Возвращаюсь назад, из папки Setup. Дабл клик по файлу SQLite.NET.2010.MSBuild.sln (потому что студия 2010)
Открывается студия, лезут ебучие варнинги.
7. Build -> Build Solution (656 Errors, 24 Warnings, блядь).
Все Errors при попытке кококонпеляции этой вот шляпы "System.Data.SQLite.EF6.2010", и вот этой залупы "testef6.2010".
Значит сорец не полный, блядь.
Вижу также, в папке sqlite-netFx-full-source-1.0.113.0\Externals какие-то пре-компиленные .dll-ки, значет сорец не опен, блядь.
8. Дальше, несмотря на варнинги и ерроры, кококонпеляция, вроде как прошла.
И теперь, где-то, здесь: \sqlite-netFx-full-source-1.0.113.0\obj\2010
я вижу кучу папок.
Среди них:
"\sqlite-netFx-full-source-1.0.113.0\obj\2010\Win32\DebugStatic\System.Data.SQLite.dll.intermediate.manifest"
"\sqlite-netFx-full-source-1.0.113.0\obj\2010\Win32\Debug\System.Data.SQLite.dll.intermediate.manifest"
"\sqlite-netFx-full-source-1.0.113.0\obj\2010\System.Data.SQLite.Linq.2010\Debug\System.Data.SQLite.Linq.dll"
"\sqlite-netFx-full-source-1.0.113.0\obj\2010\System.Data.SQLite.2010\Debug\System.Data.SQLite.dll"
9. Хуй знает достаточно ли этого, и будет ли оно работать, или придётся - опять переустанавливать шиндошс.
АААААААААА! Хочу сука СУБД заебатую, опенсорцную, чтобы из чистого сорца состояла, и чтобы была без троянов вшитых в говнокод.
Вот здесь, вроде, нашёл что-то попижже. https://github.com/moneymanagerex/System.Data.SQLite
там архив на целых 100 метрабайт, буду цацкаться с ним, кароче.
Анон, какие РАСШИРЕНИЯ, делают язык SQL - тьюринг-полным?
Кроме PL/SQL и PSM, разумеется: http://assets.en.oreilly.com/1/event/27/High Performance SQL with PostgreSQL Presentation.pdf
Вижу здесь - СTE:
https://coderoad.ru/900055/Является-ли-SQL-или-даже-TSQL-Тьюринг-полным#7580013
А какие ещё вы знаете?
>>885219
О, ебать! Что ж вы мне не сказали, что тут есть тред про базы данных и СУБД, с матчастью в ОП-посте?!! https://2ch.hk/pr/res/1869616.html (М)
аноны из того треда не сделали же нам ничего плохого, чтобы их наказывать
Почистил еще раз хранилище для сайта и все заработало, хз я и до этого куки удалял. Хуита какая-то.
У кук есть аттрибут secure, если он равен true, значит эти куки могут изменяться только по протоколу https. На пике ты делал запрос через http и браузер сказал, что не будет перезаписывать куки с пометкой secure.
Какую команду для этого можно использовать?
Почитал.
Любопытная штука, но не то. CQRS разделяет команды и запросы, а я реквестировал несколько иное: шаблон или подход, при котором система имеет внутри себя (хохо, кажется я сейчас сам отвечу на свой вопрос), имеет внутри себя кластер из синхронизированных датасорсов, и в ответ на реквест данных извне, система возвращает актуальные данные из мутабельного домена в кластере, а при команде на модификацию данных, система создаёт или изменяет один из мутабельных доменов, имея в своём составе корневой иммутабельный домен.
Собственно, шаблон кластера моему реквесту и отвечает. Вопрос закрыт.
Иммутабельный домен, если кто не догадался, это данные либо вшитые в исполняемый файл, либо находящиеся в системной области приложения и не доступные для изменения юзеру (требующие прав администратора, что небезопасно и не приветствуется). Мутабельные домены - это файлы, созданные приложением в процессе своей работы в пользовательской области приложения (в аппдате, если речь о винде).
Кстати, можешь попробовать через modelBuilder попробовать свое шифрование напердолить, чтобы за тебя этим ef занимался. Через fluent api
В чем смысл? Перенести код с одного места в другое?
2) Какой либой лучше всего можно сжать байт массив?
>Могу ли претендовать на зп 60к, при этом удаленно?
Зависит от места работы и твоих знаний в итоге.
Но вот
>Полгода стажируюсь на c# за 25к
Это пиздец ставит крест на нормальной работе, тупо даже собес начать не получится.
Да и судя по всему знаний у тебя минималочка так что я бы особо на что-то не надеялся.
В Jenkins когда смотрю отчет о билде всюду кракозябры. Как можно исправить? Кодировки поменял.
Такая же херня в репозитории удаленном Git. Хотя в IDE в проекте все отображено корректно.
Ну да. Типа того.
Код примерно такой
Log.Write("Работа закончена. Выход.");//запись в файл через streamwriter, всегда печатается
Environment.Exit(0);//а этого уже не происходит
Если перед выходом вписать задержку Thread.Sleed(100500); то программа просто ждёт эти 100500мс и нормально завершается. Есть какой-то нормальный способ вставить ожидание запросов к программе уровня операционной системы вместо фиксированной задержки?
Ну хуй знает, может быть что-то типа Application.Close(0); хотя нет, хуйня какаята.
>Есть какой-то нормальный способ
Да, делать всё асинхронно используя Async методы и async await конструкции.
Чтобы более подробно ответить, нужно видеть код. Неизвестно как ты эти хэши считаешь и какими вызовами к внешнему коду (коду ОС) пользуешься, как создаешь потоки и т. д.
> акими вызовами к внешнему коду (коду ОС) пользуешься
Хвалёный дотнет не может без внешних вызовов, чисто на внутреннем управляемом коде прочесть файлы и посчитать хэшсуммы? Понимаешь, что говоришь вообще?
А не всё ли равно какой код, если всё работа завершена до печати "Работа закончена. Выход." и ситуация происходит не каждый раз?
Вроде не веб-макака, а такую чушь пишешь. Работа с файлами это всегда обращение к внешнему коду, независимо от языка. File.Read это обертка над системным API по чтению файлов.
>>886358
>А не всё ли равно какой код, если всё работа завершена до печати "Работа закончена. Выход."
Судя по написанному "добавляю Thread.Sleep и всё работает как надо" она не завершена.
>и ситуация происходит не каждый раз?
Ну так это поведение очевидно, когда дело происходит независимо от твоего кода. Когда-то вся информация обрабатывается в нужный момент времени, когда-то она не успевает обработаться и спасает только Thread.Sleep.
>Судя по написанному "добавляю Thread.Sleep и всё работает как надо" она не завершена.
>Ну так это поведение очевидно, когда дело происходит независимо от твоего кода.
Тебе не кажется, что здесь какое-то противоречие? МОЯ программа завершила работу, но ЧТО-ТО внешнее мешает ей.
Твоя программа вызвала внешние ресурсы и теперь её работа связана с этими ресурсами, если ты их никак не контролируешь, то поведение и твоей программы, и внешних ресурсов, непредсказуемо и может приводить к подобным твоей ситуациям.
Если не можешь показать код, то тебе следует пройтись по нему самостоятельно, предварительно прочитав что-нибудь на тему работы с файлами и проштудировав документацию на MSDN. Учитывая, что ты вообще не представляешь как это всё происходит, тебе в любом случае стоит это сделать.
Работа с I/O (input/output устройства), куда входят HDD, SSD, флешка, принтер, сеть и прочее - это внешние зависимости и операции над ними выполняются за пределами твоей программы. Не важно на каком языке ты программу написал.
По своей природе все эти операции аснихронные. Ты только можешь послать команду из своей программы, а потом надо сидеть и ждать, когда операция закончится.
Если работаешь с новым асинхронным АПИ, то надо правильно им пользоваться, иначе будут вот такие фокусы, которые ты описываешь.
>на строке 21
>на пике нет нумерации строк
>если посчитать все строки, то будет 17
Тут всё сложно. Проблема на генном уровне. Как говорится, нужно поменять прокладку между компьютером и сиденьем.
Блять, не тот скрин, сначала правильный залил, потом удалил и залил кривой
>на 21 строке
>21 строка пустая
Хуй знает, бротиш, попробуй переустановить шиндоус или перезапустить комп и сбросить настройки биоса.
Один вариант - вылетать с return из Awake из базового класса модуля. Второй вариант - в Awake делать this.gameObject.SetActive(false);. Третий вариант - звать Destroy. Что из этого не вызывает багов, я не знаю.
> Unity-модулю
В юнити своя атмосфера. Шарп там юзается как скриптинг. Следовательно тебе следует предпочитать имеющиеся там методы работы с движком и не лезть общешарповыми средствами туда.
А имеющиеся методы работы тебе следует почерпнуть из официальной документации.
Юнити вообще пиздец. Помню, когда только язык начинал изучать, решил попробовать свою игру написать. Ломал голову неделю, а в итоге хуета какая-то неструктурированная. Все эти методы внутридвижковые – они не интуитивно понятные, учишь как второй язык. Много воды с тех пор утекло, а юнити я до сих притрагиваться побаиваюсь
Повторяюсь. Документацию читай. Как и к любому сложному программному продукту. Без документации ты гораздо сложнее вкатишься. У нас тут неделю или две назад был в треде такой один. Вкатывался в ДевЭкспресс без чтения доков, без изучения примеров. С него половина треда угорали, а вторая половина разводили руками, не зная, как ему помочь.
Выбираю между шарпом и джавой для бекенда в Украине.
Цель не выявить лучший, а более перспективный по времязатраности/зп/месту
Что выдает консоль на скрине. Подскажите что делать?
Как лучше сделать на шарпе - простую форму обратной связи?
Ну, чтобы был сервер, страничка с формой,
и чтобы можно было написать админу сервера,
и получить ответ от него?
Можно ли как-то обойтись без базы данных, регистрации и авторизации?
Самое простое, что приходит в голову - это сохранять сообщения (и аттачи) - в виде текстовых файлов,
но если регистрации-авторизации нет, то кто угодно может срать , а значит нужно что-то вроде валидации емейла,
и ещё и каптча.
Если емейл юзера будет валидироваться, то надо пердолится с автоматической отправкой емейлов с кодом подтверждения емейла юзера, а тогда палится емейл админа, что херово.
Что если в торе просто повесить форму с каптчёй и сохранять текстовые файлы, без палева?
И щё один аспект... Ответ от админа.
Это может быть емейл с фейкомыла,
а может быть ответ внутри (что-то вроде системы тикетов),
а тогда нужна база данных и регистрация, блядь, и пердолинг с таблицами и проектированием баз данных, и SQL, и прочей ебалой.
Короче, как проще сделать портабельную и легкоподнимаемую форму обратной связи, с чего начать проектировать это говно?
Есть база данных. В ней три таблицы, вроде как связанные между собой (если это важно, я докину их список) Нужно, чтобы таблицы выводились по одной в зависимости от нажатой кнопки в datagridview, и при этом должны работать три операции: добавление, редактирование и удаление строк еще поиск по полям нужно, но это не так важно.
У меня есть сейчас все три функции, но они работают только на первую таблицу. А как сделать так, чтобы проходила проверка, какая таблица открыта сейчас, и после этого работать с ней, я не знаю
собственно, в этом и заключается трудность. Подскажите, как её сделать?
>Можно ли как-то обойтись без базы данных, регистрации и авторизации?
Можно, но без БД будет сложно. Воспользуйся бесплатными MongoDB или Firebase
>а значит нужно что-то вроде валидации емейла,
и ещё и каптча.
Email не нужен. Какой от него толк если его заменить можно за пару минут?
Капча подключается за пару минут. Сохраняй в бд IP отправившего, сообщение и сделай лимит на количество сообщений с одного IP.
1) Можно как-то сделать чтобы при сборке одного проекта в решении собиралось автоматически другое (dll)?
2) Можно как-то сделать гит для всего решения, а не для отдельных проектов? А то я как лох открываю по отдельности проекты в решении чтобы закомитить.
ничего не понял, покажи картинки
>Можно, но без БД будет сложно.
Насколько я понимаю, можно вместо таблиц - сделать кучу папок, с названиям таблиц, а вместо данных в строках таблиц - писать JSON-файлы в эти папки. А уже в софтине прописать всю хуйню, чтобы работало как база данных. Но это не точно.
>Воспользуйся бесплатными MongoDB или Firebase
А они опенсорц или не?
>Email не нужен. Какой от него толк если его заменить можно за пару минут?
Ну, наверное - чтобы было куда ответить?
>Капча подключается за пару минут.
Есть где-то каптча на шарпе, или ты про гуглокаптчу?
>Сохраняй в бд IP отправившего,
>сообщение и сделай лимит на количество сообщений с одного IP.
А если форма в TOR'e, чтобы IP-сервера не палить, и юзеры ломятся через TOR, нахрена сохранять IP шлюзов TOR'a, если они - фейк?
Но ты прав, тут скорее надо не лимит на количество сообщений, а лимит на количество сообщений за определённый период, чтобы не срали вводя каптчу.
> вместо таблиц - сделать кучу папок, с названиям таблиц, а вместо данных в строках таблиц - писать JSON-файлы в эти папки.
А ещё можно вместо автомобиля купить два велосипеда, сварить вместе и сверху лист кровельного железа приебнуть.
Бля, нанобордо-шизик, может ты уже начнёшь подписывать каждый свой пост, чтобы нормальные люди на тебя времени не тратили?
Я шарпист в Украине. Работа есть, перспективы есть.
Паша, с такими вопросами надо в гугл. Там ещё и древний фреймворк 4, про который уже никто не помнит. Возможно какие-то библиотеки друг с другом конфликтуют, надо совместимые версии искать.
Иди тьюториалы учи. То что тебе нужно работает из коробки по умолчанию. Причина, по которой оно работает как-то криво - ты сам.
1) Студия автоматом пересобирает изменившиеся проекты в открытом решении.
2) Весь код (решение и его проекты) должен храниться в одном репо (за исключением особых случаев).
Ты пробовал поставить точку останова и пройтись по шагам? Так хотя бы будешь в отладке видеть где оно остановилось и какой у объектов стейт.
Ну и вообще, я вот загуглил пример с сайта MS т.к. не пользовался никогда COM-портами. Вот, посмотри как они читают https://docs.microsoft.com/ru-ru/dotnet/api/system.io.ports.serialport?view=dotnet-plat-ext-5.0
Я бы тоже советовал шарп. Но скорее из-за того что у него не такой зоопарк как в джаве, где у тебя куча систем сборок, нужно знать разношерстные фреймворки и вообще какой-то писос. Тут все просто: Как майкрософт решил - так ближайшие пару лет и будет. Удобно.
Ну смотри, у тебя как-то же можно переключаться между таблицами. Можно. Вот при переключении - смотри как там назначается значение текущей таблицы в DataGreedView и просто добавь поле для хранения этого значения, допустим _selectedTable. А дальше в своих методах - бери значение этого поля и используй.
Да там проблема из-за за конфликтов. Запустить только через powerShell можно
> Весь код (решение и его проекты) должен храниться в одном репо (за исключением особых случаев).
Охотно верю, на что нужно нажать в вижуал чтобы это сделать?
> Студия автоматом пересобирает изменившиеся проекты в открытом решении.
Я вкурсе, в том то и дело что мне и не нужен весь солюшн, а только конкретный проект. Я тыкаю обычно ф5 и собирается текущий проект.
Я писал на нем небольшой проектик, но всё же это не так удобно как MVC. Пару страничек - да, если больше то упираешься в проблемы с путями и код быстро захламляется параметрами.
Кто-то пользовался бесплатной Azure?
Допустим я хочу для "портфолио" замутить веб-приложение. А т.к. нищук - ищу бесплатные способы. Ну, собственно, я погуглил, фронт решил на гитхаб-пейджес закинуть. Теперь вот думаю о том чтобы АПИ намутить какой-нибудь. Загуглил. Вроде в азуре можно 10 веб-апишек и какую-то их NoSql бд использовать безлимитно. Конечно, там ограничения на число обращений в месяц и все такое. Но маленький CRUD, который только я буду использовать, я думаю должно хватить.
Вот и вопросы по поводу всего этого дела.
Есть ли какие-то подводные камни в такой вот связки, в контексте не реального проекта, а "портфолио"? Нужно ли какие-то дополнительные телодвижения будет совершать для того чтобы это вместе функционировало, кроме настройки веб-сервера на прием запросов с гитхаба?
Вообще, кто-нибудь такое делал?
Может там какие-то подводные камни есть?
> Насколько я понимаю, можно вместо таблиц - сделать кучу папок, с названиям таблиц, а вместо данных в строках таблиц - писать JSON-файлы в эти папки. А уже в софтине прописать всю хуйню, чтобы работало как база данных. Но это не точно.
Да, пропиши, блядь, constraint к папкам, еще индексы на них посчитать не забудь и расширение для ef к своей папочной дб не забудь написать для комфортной работы. Нахуй нам SQLite? У нас есть папки
is в С# используется для проверки типа объекта.
Твою лапшу из || лучше заменить на switch в которых все сравнения будут case'ами ведущими к одному результату
Алсо, кто-то мне укажет где я мог проебаться? .net 4.0 - compressionLevel'a у меня нету.
Или может есть какая-то платиновая либа для сжатия байт массивов?
У меня теперь другой вопрос - есть на nuget'e библиотека DotNetCompression. У них на офф сайте при загрузке - написано 30 days trial, и всякие тарифные планы.
Вопрос - что мне по идее может быть если я просто качаю либу с нугета? Мне в один день в апликухе вылетит эксепшн с в.в.пыней - плоти налог или как это работает?
Что вообще надо для вката в SQLite на .NET Framework?
Я вот создал таблицу, забил значения в неё, прочитал, и даже вывели их вроде норм.
Дальше пытаюсь создать таблицу с блобами, записать туда байты и прочитать их из базы.
А оно мне вот такую хуйню выдаёт:
>Cannot set CommandText while a DataReader is active
типа предыдущая таблица ещё читается ридером, а ты пишешь новую? Хуй тебе, хуй тебе, ХУЙ ТЕБЕ. Бля. Не пашет ваша сиквелайт - хочется удалить всё нахуй и разломать комп.
вкатун
Есть задание но не могу понять возможно ли его реализовать в c# или это для любителей Java ?
- привести разницу между методом isPresent(isExisted) и isDisplayed
- реализовать кастомное ожидание на метод isEnabled(это должен быть вызываемый метод)
- реализовать кастомное ожидание на метод isDisplayed(это должен быть вызываемый метод)
Нормально. Даже если спрашивать не будут, по факту тебе придется и фронтенд делать. Так уж в .net'е повелось.
Прям фронтенд вот верстать по макетам джуну тоже придется?
Эх, говорили одногруппы в питон с джангой идти.
Бывает и исключительно бекенд, и чуть-чуть фронтенда, но фулстек - вполне себе норма.
И да, на джуна фронт в первую очередь будут спихивать.
Ну, лично по моему опыту - собирать прототипы на каком-нибудь SPA-фреймворке. Дальше обычно уже специально обученный фронтендер будет.
Да и не ссы, если ты дотнет освоил, то освоить JS не должно составить особых проблем.
Как я это попытался решить. Я определяю, перешли мы на другую сторону или нет и если перешли, то значение поля я делаю отрицательным и, соответственно, цилиндр и на другой стороне начинает вращаться НА меня. Всё было бы хорошо, но, так как я это поле делаю отрицательным, то мне показывается не то что должно, а противоположная сторона. То есть, я накрутил на 90 градусов, повернул на другую сторону и мне показывает не -90(270) градусов, а 90 соответственно. То есть, если я делаю одно, то ломается другое. И как это сделать я не понимаю вообще. Надеюсь кто-нибудь поймёт, что я имею ввиду.
нет там гайдов по web Forms
Если ты работаешь с гитом через VS, то иди гуляй. С гитом надо работать через консоль. Или хотя бы понимать что твоя ГУИ тулзяка делает behind the scene.
Я пару проектов выкатывал через Azure для тестовых заданий, чтобы нанимающая компания могла с моим приложением поиграть. Единственный косяк - через месяц они начинают требовать кредитную карточку, чтобы в случае если ты вышел за пределы бесплатных ресурсов с тебя начали снимать денюжку. А с пониманием что там платно, а что нет - очень сложно.
Запили на гитхабе репу с твоим кодом. Посмотрю
Блобы, если они большие, в том числе изображение, можно хранить как раз таки в папке, а в базе – путь к ним
> для вката
Ты хотя бы sql до join изучил? Если используешь ef и подход code first, когда ты из кода бд генеришь, то можешь и не знать. Но в дальнейшем без sql будет плохо
Как можно по другому реализовать эти свойства?
- реализовать кастомное ожидание на метод isEnabled(это должен быть вызываемый метод)
- реализовать кастомное ожидание на метод isDisplayed(это должен быть вызываемый метод)
Нужно создать как то по своему их реализацию. Вот задание такое скинули. Когда спросил что сделать сказали нужно как то по своему их реализовать. Может при помощи явного и неявного ожидания типа ?
по работе нужно, я же не долбоеб, что бы по собственному желанию в говне мамонта копаться
Ну ладно, я уж думал, ты чего напутал и решил свежачком обмазаться. По литературе не поскажу, разве что какие-нибудь старые книжки искать, как сейчас есть Pro Asp.net
>>888583
> Как можно по другому реализовать эти свойства?
> - реализовать кастомное ожидание на метод isEnabled(это должен быть вызываемый метод)
> - реализовать кастомное ожидание на метод isDisplayed(это должен быть вызываемый метод)
Так свойства или методы?
Кастомное ожидание – это какое? Какие параметры должны кастомизироваться?
Как ты представляешь сигнатуру какие параметры в него можно передать метода, если уж это метод?
Такое ощущение, что либо ты что-то не понял, либо задание составлял какой-то дебил
>Такое ощущение, что либо ты что-то не понял, либо задание составлял какой-то дебил
Не исключаю два варианта ))
Но по факту, насколько я знаю в .net нету методов таких, но есть свойства Dispose и Enable. То есть исходя из задания, нужно создать какую то кастомную проверку, на какие то элементы страницы ориентируясь на эти свойства
Ну ты разберись – свойства или методы тебе нужны. Набросай примерно, как это все должно фунциклировать, просто на словах, как это видишь. Пока сложно что-то сказать
Методы я такие в C# не нашел такие в Java есть
Ну я вижу так создать метод в параметры ему передавать элемент страницы который нужно проверить на наличие. В методе реализовать explicit wait и если данный элемент отобразился возвращать true если нет false.
Примерно так думаю.
Как сконвертировать portable.exe в ELF, чтобы на линуксе запускалась вся эта портабле-заебатость?
>Запили на гитхабе репу с твоим кодом. Посмотрю
А что туда впаять? Сорец SQLite залить, или просто код примера-теста?
Если второе, то: это был просто код отсюда: http://zetcode.com/csharp/sqlite/
из секции
>C# SQLite create table
затем она читалась вот так:
>System.Data.SQLite.SQLiteDataReader dr = read(cmd, "SELECT * FROM cars");
>while (dr.Read()){
> Console.WriteLine("ID: {0} , Car Pet Name: {1}, price: {2}",dr[0],dr[1],dr[2]);
>}
плюс ниже, ещё - код отсюда: https://stackoverflow.com/a/625485
Чтобы протестить блобы.
Но я уже разобрался. Пока reader занят, нельзя изменить cmd.CommandText,
поэтому надо было взять con и cmd в два using'а при записи-чтении таблицы,
и так же само - в два using'а, при записи-чтении байт-BLOB'а,
и внутри ещё - открыть соединение с базой, потому что после юзинков она закрывается.
У меня вчера так подгорало от всего этого, пиздец. Но по тихоньку разбираюсь.
Хотелось бы создать репо какое-то, чисто для гонева, чтобы срать там кодом,
и сделать короче примеры там, для всех кейсов, что-то вроде тестов,
ну, чтобы из их кода было очевидно как юзать эту либу.
>Блобы, если они большие, в том числе изображение, можно хранить как раз таки в папке, а в базе – путь к ним
Вообще, изначально, я хотел протестить, как работает запись и чтение блоба,
а в будущем, например, хранить зашифрованные пароли, байтами,
вместо того чтоб конвертить их в hex и хранить как TEXT...
Но, глядя на эти лимиты для текста и блоба, туда и картинки могут в base64, без проблем залезть: https://www.sqlite.org/limits.html
Но бейс это громоздко, поэтому blob.
Ты прав, и быть может, лучше файлы хранить как файлы, потому что база может задамажится,
но с другой стороны, в треде про СУБД, аноны говорят, что в БД главное НАДЁЖНОСТЬ ДАННЫХ, чтобы их не проебать.
К тому же, как я понял, база, может ещё и реплицироваться, и синхронится по сети,
а если файлами хранить, то для их раздачи придётся открывать общий доступ к папке, или шарить её,
и по одному давать возможность выкачивать.
Я думаю, лучше сделать таблицу хэш-блоб, и расшарить базу по сети, через TOR,
чтобы как в torrent'e, по magnet-ссылкам, можно было, подключившись к рандомной базе,
по хэшу файла, сразу найти его в базе и тут же - выкачать файл из децентрализованной сети.
С другой стороны, раздувать базу блобами - хуита, особенно если её начнут вайпать файлами.
Поэтому, лучше, наверное, там хранить просто хэш и относительный путь, а файл отдавать с расшаренной папки.
Но тогда, файл (в смысле контент) - он может быть тупо подменён, где-то, и отдасться говно, а не годнота,
а в базе данных такая хуйня исключена, там целостность данных - превыше всего.
Пиздец дилемма, короче. Бггг.
>Ты хотя бы sql до join изучил?
Нихуя я не изучил, я только вкатываюсь.
Но потихоньку разбираюсь уже, вроде как, после этой статьи: https://proglib.io/p/sql-for-20-minutes
А с чего начать грызть это дело, чтобы досконально знать? Слышал, что в даже тьюринг-полноту может сиквел, бггг.
>Если используешь ef и подход code first, когда ты из кода бд генеришь, то можешь и не знать.
>Но в дальнейшем без sql будет плохо
Не, "ef"(Entity Framework) и "подход code first" это всё, пока - вообще дремучий лес.
Тот код, вышеописанный, который от котрого вчера мне пердак припекло,
это был тупой тест методов System.Data.SQLite, списка методов которого я не вижу.
Как я понял, это провайдер ADO.NET, и там над SQL-запросы фомулировать, и пихать, прямым текстом, в команды.
Я даже, для этого, свои методы нагородил уже, блядь, чтобы просто SQL туда совать, и не дублировать нихуя после неё.
>Запили на гитхабе репу с твоим кодом. Посмотрю
А что туда впаять? Сорец SQLite залить, или просто код примера-теста?
Если второе, то: это был просто код отсюда: http://zetcode.com/csharp/sqlite/
из секции
>C# SQLite create table
затем она читалась вот так:
>System.Data.SQLite.SQLiteDataReader dr = read(cmd, "SELECT * FROM cars");
>while (dr.Read()){
> Console.WriteLine("ID: {0} , Car Pet Name: {1}, price: {2}",dr[0],dr[1],dr[2]);
>}
плюс ниже, ещё - код отсюда: https://stackoverflow.com/a/625485
Чтобы протестить блобы.
Но я уже разобрался. Пока reader занят, нельзя изменить cmd.CommandText,
поэтому надо было взять con и cmd в два using'а при записи-чтении таблицы,
и так же само - в два using'а, при записи-чтении байт-BLOB'а,
и внутри ещё - открыть соединение с базой, потому что после юзинков она закрывается.
У меня вчера так подгорало от всего этого, пиздец. Но по тихоньку разбираюсь.
Хотелось бы создать репо какое-то, чисто для гонева, чтобы срать там кодом,
и сделать короче примеры там, для всех кейсов, что-то вроде тестов,
ну, чтобы из их кода было очевидно как юзать эту либу.
>Блобы, если они большие, в том числе изображение, можно хранить как раз таки в папке, а в базе – путь к ним
Вообще, изначально, я хотел протестить, как работает запись и чтение блоба,
а в будущем, например, хранить зашифрованные пароли, байтами,
вместо того чтоб конвертить их в hex и хранить как TEXT...
Но, глядя на эти лимиты для текста и блоба, туда и картинки могут в base64, без проблем залезть: https://www.sqlite.org/limits.html
Но бейс это громоздко, поэтому blob.
Ты прав, и быть может, лучше файлы хранить как файлы, потому что база может задамажится,
но с другой стороны, в треде про СУБД, аноны говорят, что в БД главное НАДЁЖНОСТЬ ДАННЫХ, чтобы их не проебать.
К тому же, как я понял, база, может ещё и реплицироваться, и синхронится по сети,
а если файлами хранить, то для их раздачи придётся открывать общий доступ к папке, или шарить её,
и по одному давать возможность выкачивать.
Я думаю, лучше сделать таблицу хэш-блоб, и расшарить базу по сети, через TOR,
чтобы как в torrent'e, по magnet-ссылкам, можно было, подключившись к рандомной базе,
по хэшу файла, сразу найти его в базе и тут же - выкачать файл из децентрализованной сети.
С другой стороны, раздувать базу блобами - хуита, особенно если её начнут вайпать файлами.
Поэтому, лучше, наверное, там хранить просто хэш и относительный путь, а файл отдавать с расшаренной папки.
Но тогда, файл (в смысле контент) - он может быть тупо подменён, где-то, и отдасться говно, а не годнота,
а в базе данных такая хуйня исключена, там целостность данных - превыше всего.
Пиздец дилемма, короче. Бггг.
>Ты хотя бы sql до join изучил?
Нихуя я не изучил, я только вкатываюсь.
Но потихоньку разбираюсь уже, вроде как, после этой статьи: https://proglib.io/p/sql-for-20-minutes
А с чего начать грызть это дело, чтобы досконально знать? Слышал, что в даже тьюринг-полноту может сиквел, бггг.
>Если используешь ef и подход code first, когда ты из кода бд генеришь, то можешь и не знать.
>Но в дальнейшем без sql будет плохо
Не, "ef"(Entity Framework) и "подход code first" это всё, пока - вообще дремучий лес.
Тот код, вышеописанный, который от котрого вчера мне пердак припекло,
это был тупой тест методов System.Data.SQLite, списка методов которого я не вижу.
Как я понял, это провайдер ADO.NET, и там над SQL-запросы фомулировать, и пихать, прямым текстом, в команды.
Я даже, для этого, свои методы нагородил уже, блядь, чтобы просто SQL туда совать, и не дублировать нихуя после неё.
dll не exe, а надо exe, и ещё и portable, и чтобы elf был портабле, и вообще любой exe.
Спасибо, анон!
Вот Java метод isDisplayed().
>Explicit wait – это Thread.Sleep() или Task.Delay()?
как я понимаю это Thread.Sleep()
Да, пушо эта команда Thread.Sleep() тормозит всю программу.
В то время как в течении Task.Delay() программа может исполнятся, но подтормаживается запуск задания. То есть это неявное (implicit) ожидание,
а Thread.Sleep() явно (Explicit) торозит всё (wait), нахуй: https://stackoverflow.com/a/34052540
В каких еще мутациях?
Как вообще работает сжатие байт массива? Заюзал компрешн дот нета - на 580мб может сжалось от силы мегабайтов 10. Что я делаю не так? В байт массиве jpg пикчи. Как их еще можно сжать (как файл, а не как шакалы)?
280x240, 0:04
Ёбаный рот вашего дотнета. Помогите понять логику индусов.
Вот есть Windows 10. Всё новое API WinRT прибито к UWP. Допустим мне нужно Windows.Graphics. Пока всё отлично с UWP.
Так же есть .NET Standard, специально сделан чтоб поддерживался всем чем можно. Я хочу использовать либу на нём, она естественно на самой свежей версии - 2.1.
И вот тут я не могу понять шутки. UWP не поддерживает .NET Standard 2.1! UWP не поддерживает .NET 5.0!
Так как мне использовать API дриснятки и их "универсальный" .NET Standard? Алло, индусы! Как, блять, либу из Nuget поставить?
Пока что вижу только вариант накостылить два отдельных процесса под UWP и всё остальное.
В доках к .NET Standard 2.1 уже полтора года написано что поддержка UWP "будет когда-нибудь в будущих релизах"...
В 20H2 так ничего и не завезли...
>В каких еще мутациях?
У тебя ссылка на массив QuestionPicture передается в метод Compress и потом в метод Write, т. е. изменения этого массива в методе Write, если этот метод его изменяет, отразятся в любом другом месте приложения в которых ты массив QuestionPicture использовать будешь. Но причина не в этом, а в том что ты CopyTo используешь вместо Read при распаковке в методе Decompress.
> на 580мб может сжалось от силы мегабайтов 10.
Это от формата зависит, лучше всего сжимается текст, jpg сжимается плохо, в случае картинок лучше использовать конвертацию в другой формат, например в webp.
В проекте коменты на русском языке отображаются нормально а когда заливаю их на гит то иероглифы ебаные.
Что делать как победить этот момент?
Привет, аноны.
Есть у меня АСП НЕТ проект, у которого на дефолтной форме два хтмл-бокса для текста.
Как мне из одного текстового поля хендлить текст, передавать его в функцию, которая на него выдаст новый текст, подаваемый во второе поле?
Сори за тупой вопрос, не требую решать за меня, просто даже хз как гуглить, выдаёт вообще не то, что нужно.
асп нет это вообще бекенд, а формы у тебя на каком-нибудь блейзоре или разор пейджс
Че тут непонятного-то? .net standard и .net5 для другого делались. Они нужны чтобы общий костяк фреймворка вынести на более-менее кросплтаформенные рельсы, чтобы можно было пилить .net хуйню и без лишних танцев с бубнами запускать на серверах с линуксами. И с этой задачей они справляются.
Вот серьезно, подумай, какой процент ПО сейчас пилится исключительно под десктоп, еще и привязанный только к винде? Да и кому нахуй нужно приложение, которое будет оффлайн работать? А так, ты запилил на .net приложение, захостил его, фронт на каком-нибудь электроне за 2 недели сделал, и все довольны.
Просто скажи какой шаблон ты выбирал при создании проекта, тогда тебе смогут помочь.
Что ты под "запустить асинхронно" подразумеваешь? Ну создай Task и запускай в нём DispatcherTimer, будет тебе асинхронно, асинхронного аналога метода Start() у DispatcherTimer нет. Но в этом смысла нет, потому что запуск не занимает много времени.
ASP .NET Web Application
При создании содержал форму default.aspx и мастер-страницу Site.Master
Я уже почти сам разобрался
Нужен был серверный элемент asp:Button с атрибутом OnClick = %function%
Уже пишу функцию
> There are various implementations of .NET. Each implementation allows .NET code to execute in different places—Linux, macOS, Windows, iOS, Android, and many more. .NET Standard is a formal specification of the APIs that are common across all these .NET implementations.
При этом на основной платформе индусов приходится сосать хуи. Это доходит до абсурда - есть либы строго под десятку на Standard, но к UWP не прикрутить просто потому что. А ведь по мнению самих индусов, UWP - это основной гуй десятки, на который всё переводят. Я просто не могу понять логики индусов, когда они пилят кроссплатформенность уровня джавы чтоб на любом чайнике запускать, но не могут осилить даже совместимость с Виндой.
Вот .NET 5 не для этого делали, но на него и похуй, я ссылался на него потому что он совместим с .NET Standard.
А знаешь что самое смешное? .NET Standard 2.1 работает с Xamarin!
Вот как функция взаимодействует с аттрибутами хтмл-элементов, если кому вдруг нужно.
Значит ты Razor используешь.
Вот этот туториал прочитай:
https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/
И всё понятно будет.
> Razor
А как там вообще это говно поживает? Всё ещё медленнее жс и тянет с собой 5 мб бинарников?
Хуитищща. При клике на кнопку идёт медленный и тяжёлый поиск элементов. При каждом клике. Представляю, как будет всё тормозить с таким подходом.
Выноси поиск в геттеры, при первом вызове геттера, как все нормальные люди.
Ты наверно с Blazor путаешь, Razor всё на стороне сервера делает, клиент получает готовый HTML, всё остальное по старинке на JS и CSS делает.
Про Blazor знаю только что его активной майки продвигают (даже стримы на Твиче делают на которых объясняю ньюфагам как с ним работать) и вроде говорят, что с каждым обновлением он всё быстрее и лучше.
Вот это справедливый доеб. Без бутылки не разберешься
По итогу просто не пользуешься UWP и прочей декстопной дребеденью. Мобилки? Ну там придется поебаться. Я бы предпочел флаттер.
На дотнете удобно пилить бекенд, удобно делать сайты на разоре, сейчас еще и блазор завезли.
Дело в том что у меня при фризе формы фризиться сам таймер. У меня на форме загрузка с бд картинок и если быстро их переключать то будет как в том меме Unfortunately Time has stopped. А лейбл на форме я уже обновляю через invoke, правда толку в этом мало.
Через еф будет удобнее и и ридеры не нужны. Ебался на одном проекте с ними. Ебучие экспешены валились хуй пойми откуда, там еще предыдущий программист учился, блядь, на продуктовом коде многопоточности и, как водится, обосрался, заложив пару мин в код. Заложил и уволился. Следом с этим кодом работал аналитик, который не учил шарп, просто накопипастил пару методов, подправив название и пару строчек кода, получил требуемый функционал, да только не учел, что состояние все на флагах и не потокобезопасное
Достался мне этот кусок дерьма с классами по две тысячи строк
Нахуй эти ридеры, решительно. Особенно при живом entity framework – где все просто и понятно, и можно даже sql не знать.
Сам можешь поиграться, только в прод не тащи эту парашу
Ну так тебе нужно загрузку из бд делать асинхронной, чтобы она не занимала UI поток. Таймер здесь ничем не поможет.
private string myProperty;
public string MyProperty
{
get
{
if (myProperty == "")
{
myProperty = form.FindControl("MyProperty1");
}
return myProperty;
}
}
А, бля, понял. Я этот код вставляю в начало aspx.cs файла, и все нужные мне впоследствии атрибуты находятся и задаются при прогрузке страницы, а не когда я в них непосредственно начинаю нуждаться.
Хотя стоп, как мне это поможет с текстовым содержанием, которое пользователь потом вводит?
Асинхронной или в другом потоке?
Означает ли асинхронность, что у нас есть евент луп, и мы в эту залупу вставляем задачи, кхмм. Эта лупа постоянно скачет во внутреннем цикле по задачам? То есть даже на одном потоке можно получить плавный интерфейс, пока что-то долго загружается?
В сеттерах отправляешь на страницу. В геттерах получаешь со страницы. Но только если есть изменения. Таким образом, несколько геттеров подряд сработают быстро. А вот сеттеры нет. Тут надо сложнее делать. С кэшированием заморачиваться.
И вот сеньоры программисты ебались есбались с этим и изобрели MVVM! DataBinding и другие страшные слова.
>Асинхронной или в другом потоке?
Асинхронность не подразумевает использование одного потока, выполнение до await и после await может происходить в рамках разных потоков, также как и запуск одной асинхронной фукнции несколько раз подряд без использования await.
>Означает ли асинхронность, что у нас есть евент луп, и мы в эту залупу вставляем задачи, кхмм. Эта лупа постоянно скачет во внутреннем цикле по задачам?
В случае асинхронности - нет. В случае WPF - да, так как всё связанное с интерфейсом происходит в рамках одного потока. Вот ты в рамках этого потока обращаешься к базе данных, поэтому тебе нужно либо делать подобные обращения асинхронными, чтобы поток UI освобождался и мог перерисовывать интерфейс и делать другие задачи, либо обращаться к бд в отдельном потоке и полученные данные передавать в поток UI при помощи Invoke диспетчера.
>То есть даже на одном потоке можно получить плавный интерфейс, пока что-то долго загружается?
Да, если загрузка идёт асинхронно. Либо если ты одну задачу разбиваешь на несколько и выполняешь эти задачи с определенной задержкой. По такому принципу в браузере всё работает.
Спасибо. То есть await перед вызовом функции ставит задачу в другой поток, а текущий – освобождает?
Он ставит задачу в очередь выполнения, а каким потоком выполнится задача зависит от контекста синхронизации и пула потоков.
Не нашел в шапке задам сюда, глупо но извините:
До шарпа изучал С/С++ достаточно долго. Играет ли это роль в освоении шарпа? Или у меня такой же уровень знаний как у человека, который вообще никаких языков не изучал?
Зависит от того на каком уровне ты изучал. И что в процессе изучения делал.
Если что-то сложнее калькулятора сам писал на С++, еще и ООП использовал, то шарп для тебя будет выглядеть скрее как: А как эти штуки в шарпе делаются. А это намного выше чем: Вообще никаких языков не изучал.
Ну, т.е. тебе останется посмотреть стандартную библиотеку, чтобы велосипедов не горадить, некоторые особенности языка, такие как свойства, делегаты, события и т.д.ну и шарповский туллсет, понять как устроен nuget и csproj
Понял, спасибо
Играет. Вот я после JS шарп учить начал, так пришлось всё переосмысливать, потому что и не знал особо чем объект от массива отличается в плане хранения в памяти.
в смысле класса, не метода, тьфу
Шарп после дельфи именно так у меня изучался, как ты описываешь. Ну и немудрено. Автор тот же самый же.
Нет, любой нельзя. Только твой. И только для целевой платформы. Будет нативный эльф в линуксе, внутри которого будет содержаться копия фреймворка вместе с твоим хеллоуворлдом. И для шындовса придётся сделать отдельный паблиш. И в нём будет нативный ПЕ в виндовсе, внутри которого будет содержаться копия фреймворка вместе с твоим хеллоуворлдом.
Кто не является? Приведи в порядок мысли в своей голове, сформулируй какого результата ты хочешь добиться, опиши ситуацию максимально подробно.
Path.GetFileName(path)
А дотнет когда нативно портируют?
дык его тоже портируют туда же.
public string Message сразу добавляется { get; set; }
Как сделать так же?
Анончики, втф. Почему он пишет, что я не могу обратиться к объекту. При этом я находил код 2011 года, в котором написано именно так, и видимо он был рабочий.
Шта? ну делаю так а оно мне новую переменную сразу создает.
Там примерно так выглядит dotnet test -s ```(name)```(value)```
что то такое. помогите прошу очень
Метод Factorial принимает в качестве параметра int x, а где он это принимает? Чет не врубаюсь.
У метанита все , туториалы имеют вид мема "учимся рисовать сову". Забей еа это дерьмо и читай троелсена или шилдта
> а где он это принимает? Чет не врубаюсь.
Там же и принимает.
parallel.for(принимает_от, принимает_до, кто_принимает);
Начни лучше с троелсена, потом рихтером шлифани. Метанит – как краткий конспект, когда забыл синтаксис, но подсказки иде недостаточно информативны, а мсдн слишком многословен
Анончики, а по каким материалам лучше начать изучать ASP.NET Core? Основы c# я уже понимаю, хочется пойти дальше, а не клепать консольные приложения. Хочется сразу изучать свежачок .NET 5
Стандартные туториалы на мсдн хорошо сделаны.
Правильно ли я понимаю что
Angular и ASP.NET Core - фронт энд
Руководство по ASP.NET Core - бекенд
Руководство по Web API это шо?
Руководство по ASP.NET MVC 5 - в чем разница 5 и 4?
Онлайн-книга Изучаем ASP.NET MVC 4
На метаните я смотрю че да как также еще в паре книжек тоже смотрю. Но вот сейчас вроде изучил немного сам c# а что дальше то делать? по sql еще читаю.
Родмап говорит что далее надо учить Entity Framework
А что читать то?
Книги это конечно хорошо но мне как то лучше читать метанит а потом если совсем не понятно читать книгу.
Что на метаните то читать?
Руководство по Entity Framework Core 3
Руководство по Entity Framework
В чем разница? Только версиях как и в версиях языка?
>Что на метаните то читать?
Ничего. Максимум что ты из этого получишь - знания которые нужно будет в будущем забывать и переосмысливать.
>Руководство по ASP.NET Core - бекенд
>Руководство по Web API это шо?
ну так есть бэкенд MVC где всякие вьюхи там, хтмл рендеришь, то есть мудришь полноценный вебсайт
а есть Web API где всякие там хитрожопые авторизации и отдаются данные обычно в json, то есть мудришь api
> Angular и ASP.NET Core - фронт энд
Angular – фреймворк для JavaScript. Ты можешь писать на ангуляре в специальных IDE, и так даже будет удобнее. Например, в WebStorm.
Просто есть шаблоны проектов, где сборка ангуляра встроена в проект на дотнете. Это франкенштейн из WebApi на бекенде и фрондендонвского фреймворка в данном случае ангуляр, но может быть реакт или vue. В итоге получается не очень удобно – сборка js-проектов обычно не быстрая. Обычно ее запускают один раз, а потом пользуются горячей перезагрузкой, так как js – интерпретируемый язык и перекомпилировать его не нужно. А вот шарп нужно. И ты будешь страдать, когда надо что-то поправить в коде на шарпе. Короче, говно. Лучше писать бек и фронт отдельно.
> Руководство по ASP.NET Core - бекенд
Я не ебу, что там на метаните подразумевается под этим. Это искусственное разделение. 99%, что это тот же самый WebApi
> Руководство по Web API это шо?
Это руководство по вебапи, еб твою мать. Делаешь запрос на него – получаешь ответ. Все. Никакого графического интерфейса, просто данные туда-сюда ходят. Сохраняются в базу, обрабатываются, сохраняются в базу данных. Ты пройди уроки на мсдн, проще станет, заодно поймешь разницу между webapi, mvc, razor pages, blazor. Все успеть за день можно
> Руководство по ASP.NET MVC 5 - в чем разница 5 и 4?
Это легаси, забей хуй. Оно почти ничем не отличается от Core, только пара моментов сделано неудобнее, сам поймешь, когда въедешь в тему
> Онлайн-книга Изучаем ASP.NET MVC 4
Опять же, легаси. Там вроде было про Core – его и читай
> На метаните я смотрю че да как также еще в паре книжек тоже смотрю. Но вот сейчас вроде изучил немного сам c# а что дальше то делать? по sql еще читаю.
Про sql ты хорошо придумал
> Родмап говорит что далее надо учить Entity Framework
Там учить особо и нехуй, фреймворк очень удачный получился, но надо понимать, что ты работаешь с sql, а не с хуй пойми какой абстракцией. Так что как sql подтянешь, все станет понятнее. На метаните неплохо все описано
> Книги это конечно хорошо но мне как то лучше читать метанит а потом если совсем не понятно читать книгу.
Хуевая логика, метанит тебе не даст понимания сути происходящего. Это конспект
> Что на метаните то читать?
> Руководство по Entity Framework Core 3
Пойдет
> Руководство по Entity Framework
Легаси
> В чем разница? Только версиях как и в версиях языка?
Core – новая ветка, работает везде. Без Core – только под винду и больше не развивается. Нахуй не нужен. Если на работе появится необходимость, потратишь пару часов и изучишь нюансы. Если знаешь sql, проблем не возникнет
> Angular и ASP.NET Core - фронт энд
Angular – фреймворк для JavaScript. Ты можешь писать на ангуляре в специальных IDE, и так даже будет удобнее. Например, в WebStorm.
Просто есть шаблоны проектов, где сборка ангуляра встроена в проект на дотнете. Это франкенштейн из WebApi на бекенде и фрондендонвского фреймворка в данном случае ангуляр, но может быть реакт или vue. В итоге получается не очень удобно – сборка js-проектов обычно не быстрая. Обычно ее запускают один раз, а потом пользуются горячей перезагрузкой, так как js – интерпретируемый язык и перекомпилировать его не нужно. А вот шарп нужно. И ты будешь страдать, когда надо что-то поправить в коде на шарпе. Короче, говно. Лучше писать бек и фронт отдельно.
> Руководство по ASP.NET Core - бекенд
Я не ебу, что там на метаните подразумевается под этим. Это искусственное разделение. 99%, что это тот же самый WebApi
> Руководство по Web API это шо?
Это руководство по вебапи, еб твою мать. Делаешь запрос на него – получаешь ответ. Все. Никакого графического интерфейса, просто данные туда-сюда ходят. Сохраняются в базу, обрабатываются, сохраняются в базу данных. Ты пройди уроки на мсдн, проще станет, заодно поймешь разницу между webapi, mvc, razor pages, blazor. Все успеть за день можно
> Руководство по ASP.NET MVC 5 - в чем разница 5 и 4?
Это легаси, забей хуй. Оно почти ничем не отличается от Core, только пара моментов сделано неудобнее, сам поймешь, когда въедешь в тему
> Онлайн-книга Изучаем ASP.NET MVC 4
Опять же, легаси. Там вроде было про Core – его и читай
> На метаните я смотрю че да как также еще в паре книжек тоже смотрю. Но вот сейчас вроде изучил немного сам c# а что дальше то делать? по sql еще читаю.
Про sql ты хорошо придумал
> Родмап говорит что далее надо учить Entity Framework
Там учить особо и нехуй, фреймворк очень удачный получился, но надо понимать, что ты работаешь с sql, а не с хуй пойми какой абстракцией. Так что как sql подтянешь, все станет понятнее. На метаните неплохо все описано
> Книги это конечно хорошо но мне как то лучше читать метанит а потом если совсем не понятно читать книгу.
Хуевая логика, метанит тебе не даст понимания сути происходящего. Это конспект
> Что на метаните то читать?
> Руководство по Entity Framework Core 3
Пойдет
> Руководство по Entity Framework
Легаси
> В чем разница? Только версиях как и в версиях языка?
Core – новая ветка, работает везде. Без Core – только под винду и больше не развивается. Нахуй не нужен. Если на работе появится необходимость, потратишь пару часов и изучишь нюансы. Если знаешь sql, проблем не возникнет
Это-то понятно. Просто паттерны изучить - это легко, понятно, за пару вечерков с консолькой делается. А дальше идет адский пиздец, потому что чтобы просто устроиться работать за еду - изволь знать SQL, JS, CSS, ASP.NET, еще какую-нибудь хуйню сверху, паттерны знай, алгоритмы блядь, из головы умей их сложность оценивать, да соси хуй лучше любой проститутки. А как в это вообще вкатиться - хуй знает.
> алгоритмы блядь, из головы умей их сложность оценивать
Вот это воще пиздец, как люди умеют в такую магию? У меня голова пухнет при попытке подумать об этом.
Можно как-то сбилдить в dll-ку, вот эту NoSQL базу данных - MemCached, позволяющую кэшировать JSON в виде пар ключ-значение: https://github.com/benapetr/memcached
Чтобы не exe-шник, после билда получить, а .dll
Поясните нубу, почему нужно дважды кликать на кнопку в WPF проекте, чтобы метод начинал работать?
Гуглил солюшн, не помогло.
Алсо, ещё проблема.
Через DispatcherTimer запилил повторение каждый указанный промежуток времени.
Также повесил на кнопку включение и выключение таймера.
Так вот, всё включается и выключается, но когда я включаю второй раз, то Repeat_Task выполняется дважды.
В какую сторону курить?
>почему нужно дважды кликать на кнопку в WPF проекте, чтобы метод начинал работать?
Не нужно.
>то Repeat_Task выполняется дважды.
Потому что ты добавляешь обработчик Repeat_Task каждый раз когда срабатывает условие if
>Не нужно.
Скажи это моей приложухе, она не реагирует на первый клик по кнопке.
>Потому что ты добавляешь обработчик Repeat_Task каждый раз когда срабатывает условие if
Можно ли мне убрать обработчики в else?
Как это сделать?
Я пока нагуглил только такое:
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate
{
Thread.Sleep(1000)
}));
Но во первых thread.Sleep мне абсолютно не подходит - UIшка должна быть жива, во вторых работает оно всрато, т.е. пикча может нормально на секунду засветиться, а может залагать и засветиться на 0.1 сек, правда это наверное из-за DispatcherPriority.
А я уже сам нагуглил, спасибо. Сейчас буду ковырять и держать вас вкурсе.
Просто название временной переменной. Так ещё обозначают out переменные передаваемые в метод.
что за ебланское название переменной. И этот чувак еще (который со скрина) туторы пишет на ютубе
какой еще курс? Я на ютубе тутор по features .NET 5.0 нашел, посмотреть, что за глину добавили и наткнулся на такое
Это как default в обычном switch-case, на твоём пике проверяются типы переменных, а не их значения, если тип Teacher то возвращает true, есди Student то false, если ни то ни другое, то false. Но сам код дерьмо, так как такого же эффекта можно было достичь написав:
IsTeacher(Person person) => person is Teacher;
я уже понял как это работает, меня "_" засмущало, что за говнище блять. Нужно было вижлу сразу открыть и проверить через intelisense
>"_" засмущало, что за говнище блять
А как иначе ты укажешь default значение в switch expression?
с lowercase название типа, так хотя бы будет интуитивно понятно. Хотя я думаю если с такой конструкцией часто работать, то можно понять, что это просто название переменной. # не трогаю пол года, уже глаз отвык видимо
Пихуй, я сам додумал.
Смари, поясняю.
На пикриле1 у меня вызывается Repeat_Task и работает всё нормально, если большой промежуток времени между тиками.
Но, если маленький промежуток, то Repeat_Task постоянно вызывается, не заканчивая выполнения по тику.
Решение проблемы на пикрил2.
Это временная переменная, она больше не нигде не фигурирует, буквально на пару строк. Это не один такой чувак, это даже решарпер такие переменные вставляет по дефолту в такие контексты.
ConfigureAwait(false) и нечему фризить
это не временная переменная
это https://docs.microsoft.com/en-us/dotnet/csharp/discards
и на нее даже память не выделяется
Подскажите годный GUI для SQLite на CShasp.
то есть? что это такое должно быть?
что такое гуи склайт на шарп?
программ админок Sqlite валом, но причем тут шарп
Есть вопрос по индексации JSON.
Предоложим, есть огромная хэш-таблица key->value,
где value - текст, или blob в base64,
а key - хэш из всего этого дерьма.
Пусть эта хэш-таблица будет огромной-огомной,
и пусть она лежит в виде нарезанного на части - JSON-файла, не помещающегося даже в этот (пикрил), автобус с жесткими дисками.
Задача элементарна. Проиндексировать всю эту хуйню как-то, чтобы быстро найти нужный жесткий диск, кластер на нём, сектор, ну и собственно считать данные.
Ну и собственно вопрос: Как правильно выстроить индекс JSON-файла?
>>893879
Ну смари, в общем, побомжевал я немного в гугле,
и нарыл-откопал вооооот такую шнягу:
https://lrepacks.ru/repaki-raznyh-programm/410-sqlite-expert-professional-repack-amp-portable.html
Там, внутри, овердохуя всяких свистоперделок,
но оно всё какое-то неопенсорцное,
и там, короче - используется прекомпиленная либа sqlite3.dll
На чём она написана - не пойму, походу на LUA, потому что там рядом lua.dll лежит.
Здесь: https://github.com/haf/System.Data.SQLite я вижу уже сорец какой-то,
но это провайдер для ADO.NET, как я понял, а гуя нет.
А вот здесь, я вижу уже некий простенький гуй, который позволяет просмотреть базу. https://github.com/devpractice-repo/SQLiteAndCSharp
>то есть? что это такое должно быть?
>что такое гуи склайт на шарп?
>программ админок Sqlite валом, но причем тут шарп
Короче, надо что-то более годное, как вот то, повыше, чтобы дохуя свистоперделок было,
и главное, чтобы был полный опенсорец, на шарпе, и даже - портабле ексекутабле,
и чтобы не надо было с установкой конпеляторов всяких пердолится, а просто чтобы MSBuild или csc запустить и сбилдить,
а ещё, желательно, чтобы приинклюдить сорец в либу, чтобы отдельный екзешник гуя шел, вместе с dll-кой сиквелайта.
>Да вроде как и не причём, ведь ему нужно для некоего
> CShasp
Ну хуй знает, почему меня переклинило в четыре креста. А разве это не тред про шарпег?
Или можно задавать интервал в самом методе привязаного на tick? Как лучше?
https://habr.com/ru/post/535438/
>чтобы был полный опенсорец, на шарпе, и даже - портабле ексекутабле
ну видимо никому оно нахер не нужно изобретать велосипед. и если найдешь то это будет продукт такого же как ты - искателя фатальных недостатков
Прикольно, спасибо.
не. ELMAH
Лучший способ - начать что-то делать. Срсли. Хотя бы простенький движок для форума запили, чтобы чел мог просто запустить и потом прикрутив фронт - иметь полноценный форум с темами, разделами, ролями, кармочкой, банами, таймаутами и прочим.
Ну, просто мне это кажется странным. Неужели мелкой работы для шарписта нет?
Чего там непонятного? Фреймворк - это просто каркас, тебе не нужно его полностью изучать, как не нужно всю стандартную библиотеку в голове держать. Ты просто смотришь задачи: Ага, мне нужно тут JWT-токены захуярить, гуглишь как оно делается и делаешь у себя; ага, мне нужно кукисы - гуглишь - делаешь. Все, блядь. Это не высшая математика, это просто вопрос того, умеешь ли ты гуглить и читать код, пытаясь понять, а не тупо скопипастив.
Ну это упрощение у тебя, согласись, есть определённый известный набор знаний, без которого ты даже загуглить не сможешь то, что хочешь сделать.
Я нуб но мне интересно, зачем ты, по сути, запускаешь каждую задачу по-очереди? Почему бы все разом, учитывая что они не зависят друг от друга?
Еще я вижу что ты там интерполяция строк пытаешься дату выводить, почему просто не использовать форматированный вывод для DateTime, и если у тебя нестандартный, этот формат вынести в константу и использовать? Что-то типа:
const string DateTimeFormat = "dd.MM.yy hh:mm:ss";
DateTime.Now.ToString(Consts.DateTimeFormat);
Да, еще, что будет если пользователь решит отменить эту задачу, а твой таймер еще внутри foreach? Просто я вот не вижу каких-то cancellationToken или чего-то подобного, чтобы прервать выполнение, т.е. получается, пользователь может остановить, затем клацнуть запустить и у тебя эта задача будет 2 раза выполняться? Или ты как-то в гуе делаешь кнопку неактивной, пока не завершится вся загрузка? Но это же странно, пользователь может захотеть прервать подзагрузку же, иногда это выглядит будто программа зависла и пользователь может ебнуть весь процесс, что тоже нехорошо.
Сорян за нубские вопросы, просто интересно же, почему так вот делаешь.
Так нужно эти знания получить сначала, прежде чем в изучение фреймворка лезть.
Ну, просто вот ты не знаешь что такое куки и нахуя они нужны и используются. Ты "изучаешь фреймворк", доходишь до кук, не понимаешь что это и зачем нужно и что тут происходит? Ты поймешь это? Нет, такая информация не усвоится. Как пятиклашка не поймет интегралы, даже если будет сильно пытаться въехать.
Всё верно. Но это обычно настолько сильно подразумевается всеми, что некоторые нубы вообще не знают об этом. Мало того, обижаются, когда им предлагаешь матчасть изучить. Типа
> хули ты мне втираешь, некогда мне учить информатику! бабло зарабатывать надо!
Объясняешь такому, что без базовых знаний, он фреймворк не поймёт. А он ссыт тебе в глаза. А буквально на следующий день приходит с вопросами типа
> как сложить 2+2 в этом фреймворке? Что за говно? Почему эту парашу все так хайпят???
Я вообще не пользуюсь калькулятором.
>неужели без тяжеловесного asp нет работы в .net?
ничего тяжеловесного в асп.нет
там просто много всего зареференсено как метапакет.
просто выше расход памяти из за 100500 разных кешей всего на свете чтобы поберечь GC
Чел, почитай про MVVM и заюзай какой-нибудь калиберн или мввмлайт. Во вью модели запускаешь свой таймер и меняешь пропертю с картинкой, вьюха просто байндится на это проперти и никакой ебли с потоками. Ну и заодно не будешь логику основывать на том, какой текст написан на кнопке. Или ты не этот >>893588 ?
Подготовил набор вопросов со скриншотами. Виды вопросов:
1. Тут я себе стреляю в ногу, видишь, где?
2. Тут не совсем тривиальный код/разметка/sql запрос, можешь понять, что происходит?
3. Если пользовался, можешь сказать пару слов про эту фичу языка/фреймворка?
4. Вот тебе юайный компонент, опиши словами, как такое можно сделать с таким стеком технологий?
Еще сотрудник немного по теории и основам языка погонял.
Естественно, сложность рассматриваемых кейсов была под уровень кандидата или немного ниже, с поправкой на минимум доступного времени. Сами кейсы, во многом, заимствовал с проекта, или делал похожие. Не знаю, насколько это репрезентативный собес был, но все довольны мной остались, обещают приглашать дальше.
>вкатун 21 лвл без вышки
Какой вывод из собеса сделал: портфолио - хорошо, но иметь теоретическую базу и некоторое понимание, как работают технологии - необходимо для прохождения технического собеседования. Смотреть только на гитхаб соискателя - нельзя ни в коем случае (на начальных позициях)!
Какие колекции есть в шарпе, как пользоваться IDisposable, асинхронность через async await, ООП и СОЛИД.
Это не я с репитами. Мне мввм ни нужон, я уже все сделал - просто присваиваю интервалы в методе tick. И потоки не нужны. И проперти там не нужно.
Защищает ли закон структуру бд?
Есть у меня взломанный софт, в нем есть бд, вот я хочу запилить такойжеНу не прям тот в точ, а просто для того что бы что то в резюме вписать. Дак вот если я скопирую структуру бд это будет считаться как что то плохое? Там просто дохующа таблиц и мне как бы на первых парах не надо все. Но если я буду делать сам чета придумывать то получится хуета, софт то то знающие люди делали и структуру бд тоже делали с умом.
Не правильно, эти собаки как раз нужны что бы выполнить js код извне с# области
Некоторый софт целиком на бд крутится. На хабре была статья, как лингвалео или какая-то другая шняга для изучения языков перенесли всю бизнес-логику в бд и получили охуенную экономию ресурсов и кучу охуевших пользователей, у которых дропнули коллекции изученных слов. Естественно, структура бд – плод чьего-то труда. Учитывая, что для гитхаба могут сделать как для ютуба – поиск плагиата, то опубликованный чужой код может тебе аукнуться если не сегодня, то в будущем. А может и не аукнуться. А какого рода приложуха -то, что куча таблиц?
Ну софт для арбитражников и маркитологов.
80 таблиц, хз на сколько это много.
Тут еще дело в том что овнер данного софта жалуется на своих конкурентов которые делают бесплатный аналог.
Такое дело, я сейчас студент (магистратура в дс), и мне тут начали преподавать C# на достаточно приличном уровне. Я раньше как-то с предубеждением относился к шарпу и жабе, и не смотрел в его сторону, а сейчас прямо влюбился. Но со вкатом не особо понятно... Смотрю на жабу постоянно в банках набирают, и платят дохуя, у меня куча знакомых ещё на 3 курсе устроились и сейчас по 200к зашибают. Просто думаю пока я студент, может стоит задрочить жабу и вкатиться куда-нибудь на стажировку, потому что на шарпе че-то смотрю один веб, который не то чтобы вызывает у меня восторг, а другие места хуй знает, есть вообще? Сначала подумал может стоит паралельно и жабу и шарп осваивать, но походу не осилю, да и вообще жаба как земля че-то, шарп намного больше доставляет.
Почему так много?
Entity Framework такой тормознутый чи шо?
А наверное так и должно быть. Первое соеденение с бд идет долго а потом уже за 1 мс.
Смотри что тебе больше интересно же.
Ну серьезно, может быть тебе нужно прямо сейчас зарабатывать, то да - бери джаву и ебаш. А может быть тебе хочется с .net'ом иметь дело больше, чем сразу начать много зарабатывать - то таки ищи на шарпе стажировки/вакансии начальных уровней.
В конечном итоге, через 5 лет опыта работы, разница между джавой и шарпом сглаживается, другое дело, что если тебе не будет хотеться развиваться в той области, с которой ты начнешь, то ты через 5 лет будешь на уровне мидла, а если интересно будет - будешь каким-нибудь крутым сеньером-помидором. Именно это и важно на начальных этапах: определить что тебе вкатывает в профессии и это изучать, блин. Я вот знаю челов, которые получают 8к зелени получают зная исключительно как с БД разными работать, но эти челы пиздец как ебанулись на нем, они о недокументированных фишках разных СУБД знают, они знают как не просто писать оптимальные запросы, но и как все это охуенно замутить распределенно пояснят, при этом о любой новой штуке что появляется - они сразу же узнают, сразу изучают, ты посмотришь их запросы и сначала ужаснешься, а потом взглянешь на карту запроса и охуеешь, потому что там блядь все так оптимально, что лучше уже и не сделать. Вот за эту хуйню они и получают деньги, а все потому что эти челы угорели по СУБД на начальных этапах, а сейчас сверху они и анализом занялись, поизучали питоны.
Я это к чему. В IT почти любой навык полезен, и уж тем более хорошо оплачивается, но только когда ты его действительно охуенно освоил. Даже, блядь, на дельфи ты найдешь работу, даже на ассемблере, даже на аде или F#, если ты будешь действительно в этом крут и будешь развивать свои скиллы дальше; а если ты просто изучил синтаксис, пару фреймворуков освоил, либы знаешь как накатывать и все что ты можешь - круды, то в определенный момент тебя просто заменят тем, кто делает все это же, но дешевле: студентом, потом ИИ.
Так тут не в девексе дело, будто я на ЕФ я делал бы то же самое, там тоже есть фича с исполнением непосредственной sql команды которая возвращает дата сет, собственно на скрине он, а девекс или не девекс тут не играет роли, меня интересует именно как эффективно парсить этот необработанный датасет, в интернете я ничего понятного не нашел
Речь идет только о получении данных, какая разница есть AsNoTracking() или нет ?
Потому что по умолчанию EF все сущности трекает
https://docs.microsoft.com/en-us/ef/core/querying/tracking#no-tracking-queries
Ну я же тебе ссылку дал на конкретный абзац:
They're quicker to execute because there's no need to set up the change tracking information.
Таким вот "И что?" надо просто не отвечать. Пусть лесом идут. Ему уже всё загуглили, а ему лень по ссылке перейти и прочитать.
Знания студента, зато замашки сеньора.
> Таким вот "И что?" надо просто не отвечать.
Анон не может не кормить жирдяя. Особенно в новогоднюю ночь!
Я зашел. почитал что это влияет на скорость записи в базу, и незначительно влияет на скорость чтение, собственно я написал и уточнил что я говорил только о чтении, на что анон мне ответил что мол "нед необходимости инфу для трекинга" тут я и понял что анон сам мало что понимает потому что-то что анон процитировал фактически не влияет на время ответа, поэтому я решил что и смысла отвечать ему нет
Тебе официальная документация говорит, что так быстрее, а ты все равно уперся. Хочешь разобраться, почему, поковыряй исходники EF. А вообще вместо того чтобы тут спорить, уже бы давно добавил в своем запросе этот вызов и замерял бы.
Скорость надо замерять после пары прогонов для разогрева. Лучше использовать https://github.com/dotnet/BenchmarkDotNet
EF стартует чуть дольше, потому что надо много чего в память подгрузить и сконфигурить. Дальше он работает очень близко к чистому SqlConnection, а иногда и быстрее благодаря агрессивному кешированию.
У меня локально на гиговых БД чистый SqlConnection и EFCore выполняют Select/Insert за 1-10мс. Зависит тупо от того, на сколько быстро Sql Server обработает запрос.
Тесты показали что с AsNoTracking() после нескольких прогонов скорость падает до уровня статистической погрешности
https://www.youtube.com/watch?v=dAiuiU6VWNc
Домашнюю бухгалтерию запили свою. Менеджер персонального бюджета. Такое всегда и всем заходит. Главное, как и в вопросе с калькулятором выше - сделай так, чтобы самом хотелось пользоваться (если бы ты не умел считать и тебе требовалась помощь для организации своих финансов).
Сап, нужна помощь. Возможно ли стандартными средствами . Net прочесть содержимое GZipStream и конвертировать в массив байтов? Через binaryreader не выходит, при попытке копировать в MemoryStream у последнего содержимое пустое. Что может сработать?
P.S SO мне в этом не помог
Я купил бу сервер и запили собственный шифрованный файлообменник, и как и этот анон сказал >>898620 я сосредоточился на том что бы самому хотелось использовать, реализовал фишки которые отсутствуют в имеющихся файлообменниках, и подумал так, даже если для портфолио не покатит то зато хоть будет у меня бесплатное облако, то есть в любом случае время не зря потрачу, как некоторые аноны которые берут для портфолио проекты которые потом ни для чего не используются или просто выбрасывается, собственно на собеседовании всем понравился проект и на первом же собеседовании меня пригласили работа на них, а файлообменник попросили допилить и заюзать для их корпоративных нужд
Как сделать простую внутреннюю почту на шарпе?
Может уже есть такое, с открытым исходником?
Сервер.
Форма регистрации:
пользователь (проверка на уникальность),
пароль,
повтор пароля (проверка корректности введённого первого пароля).
Ну а дальше, пользователь, может другому пользователю - отправить сообщение.
>при попытке копировать в MemoryStream у последнего содержимое пустое
Через GZipStream.CopyTo()? Значит стрим битый, откуда берешь его?
Ловлю эксепшн - не удается найти ресурс "Image/Module 2/pic.jpg" при попытке считать пикчу с ресурсов приложения. Сам uri - "pack://application:,,,/Image/Module 2/pic.jpg".
Что самое интересное это то что у меня идентичный код нормально считывает пикчи с папки Module 1. Пикчи в Module 2 лежат, uri 100500 раз перепроверил. Свойства на картинках выставил (действие при сборке - resource, всегда копировать самую позднюю версию). Пробовал абсолютный/релятив ури. Пробовал очистить/собрать билд. Нихуя не помогло. В чем еще может быть проблема? Можно как-то явно посмотреть свойства билда?
>>900591
Есть один небольшой метод для рисования .пнг слоя на .jpg картинке который работает на bitmap/graphics https://pastebin.com/TrnGkpc9 .
С 30 картинок - стабильно 3 пички (одни и те же) куда-то съезжают нахуй - 1 сжимается в верхний левый угол более чем на половину, другая наоборот растягивается в правый нижний угол и выходит за пределы, третья просто сжимается в левую сторону.
Разрешение картинок я само собой проверил - что у слоя что у картинки - 1920х1200, никакого смещения не требуется. Все начальные картинки .jpg, слои - .png.
С чем это может быть связано? Или есть какой-то более нормальный способ для наложения слоев?
> Или есть какой-то более нормальный способ для наложения слоев?
Бери Win2D и рисуй через CanvasComposition, на GPU с нормальным пайплайном.
> System.Drawing
Откуда ты откопал это говно мамонта времён первого дотнета и ХР?
Программа должна логиниться в яндексе и возвращать имя пользователя. Автотест должен проверять совпадает ли то что вернулось с тем что должно быть. И вся соль в том что не получается залогинится. Исключение что элемент не найден. Не могу ввести логин по итогу. Пробовал разные локаторы. Явные ожидания и обычный Thread.Sleep нихера не помогает. Что может быть ? Куда смотреть.
Во-первых, какой нахуй xpath, когда есть селекторы?
Во-вторых, сайты защищаются от автоматизированного доступа, особенно такие как Яндекс. Поэтому в 99% случаев нужно суметь обойти эту защиту.
По всей видимости у тебя не хватает навыков HTML и CSS для того чтобы проанализировать страницу и сайт с которым ты работаешь.
Чел, в Яндексе клики не работают как ты ожидаешь. И HTML рендерится через жопу жсом. Там такая пердольная срань, что ахуеешь. Пробуй их API или шли на хуй хуяндекс.
Да, под xp. Спасибо что отвечаешь.
Попробую через API нахуй к сожалению выслать не получится (
С self contained флагом
Вот допустим у менять есть
Нестатический класс в котором объявлен нестатический ивент
public event Action MyEvent;
Я подписал на этот ивент статический хендлер
static void MyAction() { }
вот так
this.MyEvent += StaticClass.MyAction;
Будет ли этот статический метод удерживать объект от сборки мусора?
> удерживать объект
Мамку свою держи лучше. Как только экземпляр класса выйдет из области видимости - твой эвент перестанет работать. Вообще поебать статический или нет метод - его вызывает класс, который будет уничтожен. Алсо, статика в ООПе - костыль, который надо избегать.
> Алсо, статика в ООПе - костыль, который надо избегать.
Двачую. Это когда сделали полностью ООП-язык, а потом оказалось, что нужны неООП-функции. Зачем вообще надо было делать полностью ООП-язык и хвастаться этим 20 лет, если в итоге оказалось, что статический функционал необходим для ряда задач, как например, точка входа в приложение и предыдущие языки прекрасно справлялись с ООП, будучи императивными ("статическими").
>что нужны неООП-функции. Зачем вообще надо было делать полностью ООП-язык
то есть существование статических классов вам ни на что не намекает. )
да все, я затупил, меня просто смутили фигурные скобки, я почему то подумал что они к classA относятся
я себе объяснил так: в пером случае переменная magicB никуда не ссылается, поэтому мы можем присвоить ее переменной c, произведя явный каст
я в чем то неправ?
Изучаю пикрил. Все четко и ясно. Но вот я даунич не могу понять почему не отображает сраницу. Файл есть. Бля я название файла по буквам проверил. Вроде все сделал как сказано в книге.
Шо не так то?
Потому что переменная типа C тоже может принимать значение null, если бы С был структурой, а не классом, то произошла бы ошибка компиляции.
Ну конечно проебался, ноя пока хз где. Сейчас снова все заново сделаю.
Бля ну я же по букве перепечатываю все с книжки(
> пока хз где
Чел...
Давай намекну. С чего они вообще должны там оказаться? Может надо сказать студии чтоб их туда скопировало?
Да я переделал уже и все норм стало.
Хуевый варик в 3 ночи что то делать )
И в смысле скопировало?
Разве при компиляции все файлы не копирует?
Да я просто наверное где то ошибся.
Сейчас же все заработало.
Кстати почему bool не может быть 0 или 1?
пхп вроде может, и как по мне очень удобно.
Чел, это специально сделано чтоб стрелять себе в ноги не отходят от класса. Тут надо спрашивать зачем вообще это сделано. В нормальных ЯП это называют hidden control flow и там борются с таким, чтоб без твоего ведома при чтении переменной или сложении не начинал считаться факториал в кишках. Я бы на твоём месте не использовал это в принципе. Нормальные люди явно через методы класса setA/getA работают.
А то в чужой либе из-за сеттеров внезапно при дроче переменных может начать жрать память, а GC яростно тереть мусор. Просто потому что ты не знал что там внутри рандомного инта что-то происходит. А потом удивляются почему же шарп жрёт память чуть ли не больше жабы.
Вопрос был в другом, нахуя делать пик1, если пик2 абсолютно то же самое и ничем не отличается
А нахуя тогда оно надо эти ваши свойства? Ну да, могу я запихнуть какую-то анальную модерацию в set, ну и что с того? Ни разу не приходилось этого делать, кстати
Пик2 является синтаксическим сахаром пика1. Ещё вопросы?
Навскидку два примера:
1) используется внешний менеджер ресурсов, который юзает внутреннее АПИ для доступа к ресурсам. Ты хочешь назначить ресурсу внятное имя переменной. Поэтому в геттере у тебя идёт вызов GetExternalResource<Type> а в сеттере соответственно SetExternalResource<Type>
2) надо, чтобы несколько переменных были синхронизированы. Например, в текстовом ярлыке на форме выписывается число, в строковом представлении, а в коде у тебя int переменная, которая в своём сеттере делает Label1.Text = IntToString(myIntVar);
Вопрос исчерпан
Ну и как называется, то что я описал выше? При изменении свойства, меняются другие свойства.
> реактивное программирование
Это типа,
> если я назову шлюху деловой женщиной, которая грамотно воспользовалась ресурсами, то смогу на ней жениться и не буду считать себя куколдом.
Примерно как-то так я это вижу.
Дошел до главы разор пейдж и вот что пишут на хабре
>Razor Pages — более вменяемое решение для веба чем MVC
Вот это как? MVC Это же патер а RP технология. Поясните пожалуйста.
Ну например в случае WPF чтобы обновить байндинг INotifyPropertyChanged используют, там из сеттера ивент кидают.
> там из сеттера ивент кидают
Ух ты, а я и забыл, что так тоже можно было. Нежданно-негаданно годное решение мимопроблемы мимокрока. Спасиб!
Привет всем. Как быть?
была задача на десериализацию ~3000 страниц.
Сразу сделал через parallel.foreach. Пошло не очень, без async не то, ушло 3:10 минут на все.
Переписал на многотопочность через разбиение n количества страниц на 1 поток и внутри ещё async. Намного лучше ушло 1.30-1.40 на все.
потом через дебри узнал про tpl dataflow. Объединяющий удобства параллелизма, многопоточности и еще ассинхронно. Ушло 1:10-1:1:15 на десериализацию.
пока искал решение ушло больше времени чем на написание, чувствую себя архиологом. Если способы быстрого поиска нужного и актуального инструмента? А то вся информация про tpl dataflow за 2012-2017 год.
и так с каждым инструментом решающий сложную задачу. Нахожу первый попавшийся инструмент, потом ещё больше поисков через дебри ещё лучше инструмент, но все инструкции по нему дремучие ужас. А потом сижу и думаю может есть что-то более современее и лучше?
Не знаю в чем херня. Из меню не могу выбрать элемент. Получаю исключение NoSuchElementException
Хотя по локатору элемент находится. Что делать что не так ?
>А то вся информация про tpl dataflow за 2012-2017 год.
а что там может быть нового (ну кроме того что они пакет переиеновали). это просто pipeline парадигма и если тебе проще мыслить ей - тебе подойдет
закодить вручную всякие async+producer/consumer не сложнее (лично мне проще)
В общем у кого как мозг мыслит тот то и выбирает абстракции для выражения.
Xaml
<Window
Window.Clicked = методнейм />
Xaml.cs:
public void методнейм(object sender, EventArgs args)
{
Контролнейм.свойство = значение;
}
ну ты можешь взять блоки от датафлоу, которые суть абстракции "элементы pipeline" и сформировать из них цепочку.
а можешь взять например System.Threading.Channels и просто сделать очереди, где результат текущей работы перекладывается в следующую очередь, из которой другой кусок кода выгребает (producer/consumer) по мере своей работы и кладет в следующую.
Dataflow - абстракция повыше где ты вот такие куски кода выделили в обобщенные элементы и потому описание получается более декларативным, нежели прямая реализация на основе очередей. Это те же яйца, просто в обертке.
ну так код все равно нужно где то написать
если во вьюмодели, то InputBindings в помощь, а вьюмодель поменяет что-то у себя и контрол связанный с вьюмоделью отобразит это новое значение.
Если же этому коду нечего делать во вьюмодели, то кроме кодбехайнда нужно мудрить бехавиор (атачед пропертю), но если это одноразовое действие, то никакого профита по сравнению с кодебехайндом это не даст
Делаю все как в книге, и ошибка как будто нет папки Models но она же есть.
На всякий ссылка на проект
https://dropmefiles.com/FQf4k
Но там ничего нет по сути, просто папки.
ВТФ понимаю что от не внимательности что то пропустил, но я уже 3 раза создавал проект и делал все как в книге.
Хуй пойми.
У меня не компилируется с этой ошибкой.
А взял проект из книги, удалил все файлы и оставил только такие как у меня, ошибка есть но компилируется проект.
Забей хуй. У тебя сейчас нет неймспейса SportsStore.Models. Добавишь что-то в папку - появится. А ты так или иначе в нее что-то добавишь.
Делается за несколько минут, даже сложно представить что может вызвать затруднения. Походу ты проебывался всё время и даже базового синтаксиса не знаешь.
И небольшой контекст - программировать я уже умею, сейчас занимаюсь скорее перекатом на шарп, поэтому было бы здорово выбрать то, что юзает больше каких-нибудь интересных особенностей шарпа.
Сразу
Я бы тебе помог, но тебе хую нужно было написать хотя бы за пару дней, я уже молчу про то чтобы самому подумать.
Спасибо больше. Даже смог нормально логирование подвязать. И материала больше про Channels. Прям 2 чаю тебе анон
Как понять, что мне вернет метод?
Можно как-то поставить точку остановки и чтоб студия сама запустила мне этот метод без дополнительных действий? А то сейчас мне приходится запускать весь проект, ебаться со всякими действиями, чтобы проверить работоспособность одного метода. Вот чтоб как проект запустился в студии, то сразу метод выполняется.
Юнит-тесты используй. Это их задача - отдельные методы на работоспособность проверять.
Для этих целей пишут Unit-тесты и применяют паттерны проектирования для того чтобы построить архитектуру, которая облегчит подобные действия. Есть даже такой подход как TDD при котором ты начинаешь писать тесты и только потом код который будет проходить эти тесты.
В общем, никакой магии для запуска единственного метода нет, можно конечно поебаться с рефлексией, но лучше всё таки делать при помощи тестов и архитектуры.
Утилити методы выности as extension methods. И для них пиши юнит тесты.
1. Я подразумеваю, что пользователь сам озаботится копированием массива, если ему надо.(в целях оптимизации, потому что скорее всего почти всегда переданный массив уже будет никому не нужен)
2. Все точки в _points должны быть отсортированы по первой координате, но я это опять же скидываю на пользователя.(и в целях оптимизации, и потому что если он передал неотсортированные точки - значит у него что-то не так и надо тогда уж исключение кидать)
Собственно как лучше всего это все допилить? Я вот думаю просто пройтись по точкам и кинуть исключение, если они не отсортированы, и комментарий написать, что массив присваивается по ссылке, а не копируется.
И если добавить бул переменную - копировать массив или присвоить ссылку - насколько от такого у вас бы глаза вытекли?
> я это опять же скидываю на пользователя
> копировать массив
> присвоить ссылку
Бляяя, не пиши больше в тред. В шапке есть учебники, читай пока их.
Пчел, вопрос не про язык. Я не спрашиваю как мне скопировать массив, я спрашиваю как пользователю этого класса сказать, что я его массив забираю по ссылке, чтобы он не отдал туда тот массив, который планирует потом ещё в каких-то своих целях использовать, а сам сделал копию.
> как пользователю этого класса сказать
Отправить читать его основы языка?
Но мне кажется это ты не знаешь их, раз такой бред пишешь.
Ну, пчел, ну. Вот я передаю в конструктор листа ссылку и лист его не утилизирует, потому что он ему нахуй не нужен.
А потом я его передаю в свой класс - и мне он там нужен.
Понимаешь о чем я? Как пользователь должен знать, буду ли я его данные менять или нет, когда это не очевидно из предназначения класса?
> Как пользователь должен знать, буду ли я его данные менять или нет
Чел, про readonly слышал? Говорю же, ознакомься с учебником.
Понял, вопросов больше не имею.
_gif1 = new BitmapImage();
_gif1.BeginInit();
_gif1.UriSource = new Uri("pack://application:,,,/Images/1.gif");
_gif1.EndInit();
И угадайте что? Пизда - минус полгигабайта озу на отображение. Ебаный рот этого казино. Сразу объявлю параметры гифки постить не буду чтобы до меня не доебались: 1.47мб, 28 кадров, кадр меняется через 100 милисекунд сам скрафтил.
Я молчу про то что в самом впфе дефолтное окошко с изображением, бэкграундом, парой кнопок, и парой лейблов - +200мб, когда например в nvidia control panel с кучей "контролов" у меня отжирает около 10мб.
2) Нужно нарисовать поверх пикчи (джипега) пнг слой. Через канвас я изначально не хотел делать потому что мое поделие должно запускаться на полунекроте и рандомный засвет для меня критичен и абсолютно противопоказан. Я решил что нужно в клеить их в рантайме как одну пикчу. На писал вот это:
var finalImage = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb);
var graphics = Graphics.FromImage(finalImage);
graphics.CompositingMode = CompositingMode.SourceOver;
graphics.DrawImage(baseImage, 0, 0);
graphics.DrawImage(overlayImage, 0, 0);
return ImageToByte(finalImage);
29 пикч нормально наклеиваются/отображаются, 30 пикчу (начальный джипег) косоебит в левый верхний угол и по размерам он стает приблизительно на четверть, а пнг слой наслаивается как по размерам нормальной пикчи. Я первым делом же проверил разрешение пикчи/слоя - одинаковое. Затем я попробовал в finalImage синитить с размерами не изображения, а слоя (на всякий случай) - нихуя. Затем я попробовал конвертнуть в разные форматы (bmp/png) - похуй. Я подумал может быть там где-то есть прозрачность на джипеге и его из-за этого пидорасит, взял перекрасил магической палочкой белые края в серый - нихуя. Ему просто не нравится одна пикча и я не могу найти какого хуя.
_gif1 = new BitmapImage();
_gif1.BeginInit();
_gif1.UriSource = new Uri("pack://application:,,,/Images/1.gif");
_gif1.EndInit();
И угадайте что? Пизда - минус полгигабайта озу на отображение. Ебаный рот этого казино. Сразу объявлю параметры гифки постить не буду чтобы до меня не доебались: 1.47мб, 28 кадров, кадр меняется через 100 милисекунд сам скрафтил.
Я молчу про то что в самом впфе дефолтное окошко с изображением, бэкграундом, парой кнопок, и парой лейблов - +200мб, когда например в nvidia control panel с кучей "контролов" у меня отжирает около 10мб.
2) Нужно нарисовать поверх пикчи (джипега) пнг слой. Через канвас я изначально не хотел делать потому что мое поделие должно запускаться на полунекроте и рандомный засвет для меня критичен и абсолютно противопоказан. Я решил что нужно в клеить их в рантайме как одну пикчу. На писал вот это:
var finalImage = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb);
var graphics = Graphics.FromImage(finalImage);
graphics.CompositingMode = CompositingMode.SourceOver;
graphics.DrawImage(baseImage, 0, 0);
graphics.DrawImage(overlayImage, 0, 0);
return ImageToByte(finalImage);
29 пикч нормально наклеиваются/отображаются, 30 пикчу (начальный джипег) косоебит в левый верхний угол и по размерам он стает приблизительно на четверть, а пнг слой наслаивается как по размерам нормальной пикчи. Я первым делом же проверил разрешение пикчи/слоя - одинаковое. Затем я попробовал в finalImage синитить с размерами не изображения, а слоя (на всякий случай) - нихуя. Затем я попробовал конвертнуть в разные форматы (bmp/png) - похуй. Я подумал может быть там где-то есть прозрачность на джипеге и его из-за этого пидорасит, взял перекрасил магической палочкой белые края в серый - нихуя. Ему просто не нравится одна пикча и я не могу найти какого хуя.
Бля, охуеть, но я не могу, серьезно.
>софтового рендеринга по технологиям из 2005
Хочешь сказать в 2005 по полгига уезжано только на гифку? Или что простое окошко занимало 200мб?
Мужик, а можешь тему оформления подогнать?
Так на клик можно только евенттриггер поставить, там же нельзя свойство контрала поменять
Бля мужик ты бы лучше пак вопросов залил или хотя бы те на которых как правило сыпятся собеседуемые.
Не мужик, надо в черный список заносить сразу нах))) Че щеглы малолетние себе позволяют, какой же ты программист, если при столкновении с задачей сразу гуглить лезешь...
Нихуя не понял, чего ты хочешь добиться, чтобы ключи в JSON-файле быстро находить или как?
Алсо зачем такое изъебство под названием JSON для хранения данных в этом случае?
>Ага, как скажешь
Вот и славно сам нахуй иди, пёс
>>909111
Писал об этом тут >>894860
Сам пак давать не буду, ведь на собес ко мне можешь попасть ты! А сыпятся на чем угодно ровным слоем. От Linq и простых селектов на SQL, до особенностей работы дженериков, async await и GC.
>>909123
Тут проблема в том, что они гуглят вещи, которые знать нужно. Если не знаешь - напишешь криво, не оптимально или вообще поломанный вариант, и даже не подумаешь гуглить.
>особенности работы GC
А нахуя это нужно ждуну-то знать? Пусть лучше уж код учится писать и гуглить ответы на свои вопросы, нет?
мимо вкатываюсь
Джуну то придется работать с уже существующей сложной системой, и нужно ничего не ломать в процессе разработки - потому, видимо и спрашивают. Джун ведь не трейни.
>Нихуя не понял, чего ты хочешь добиться, чтобы ключи в JSON-файле быстро находить или как?
Не ключи, а значения по ключам.
>>909198
Потому что там пиздатая таблица из базы данных датацентра пендосского суперкомпа.
Всё, я понел. Надо переписать файл так:
KEY1+DATA1,KEY2+DATA2,...
и заебенить индекс, отдельным файлом:
key1+startoffsetDATA1+DATA1Length,
key2+startoffsetDATA2+DATA2Length,
...
и уже этот индекс в память грузить, и шерстить ключи по нему.
>>894282-кун
Въехал после прочтения одной книги (Valerio De Sanctis - ASP.NET Core 3 and Angular 9-Packt Publishing (2020)) и документации на MSDN. Ничего сложного нет, главное понимать основные концепты вида DI и IOC.
Сделайте кодревью! Позязя.
В примере - игра жизнь. Вот. Да. Ну, вы знаете, клеточный автомат.
https://github.com/BakaVaka/LifeGame/tree/master/LifeGame
Мало того что сам код говно не разбитое хотя бы на методы, не говоря уже о классах, так еще и наименование существующих методов максимально ущербно - Update, Draw, LifeGameRulles (да-да, это тоже название метода), GetCell. Что обновляет, что рисует, какие нахуй руллес живая игра, зачем нам брать клетку, откуда её брать и т. д, о чём это должно говорить тому кто смотрит на код? Да ни о чём, просто садись и читай всю эту жижу которую ты высрал, строчку за строчкой, пока не воспроизведешь весь код. Но в данном случае легче конечно всё снести и написать адекватный код.
Задача популярная, поэтому пиздуй на гитхаб, гугли по решениям "GameOfLife" и смотри как делают более шарящие товарищи.
Ну блин. Я загуглил, там разбитие на классы ради разбития на классы. Ну вот вынесу я "клетку" в отдельный класс, что это даст? Понятнее все равно не станет, будет: Что за клетка, какой еще грид и прочее, при этом код разростется, это повысит вероятность ошибки. Ко всему я не уверен что это не скажется на производительности. Тут и так довольно все плохо, всего при 640000 - уже видно что медленно. При миллионе клеток - 14фпс. А я хотел бы хотя-бы 30+ иметь стабильно. Вооооот.
И зачем ты это высрал? Твой код так и остался говнокодом. Для достижения производительности не уменьшают количество классов, а делают вместо них структуры, либо достигают её улучшением алгоритмов. И у тебя проеб даже на уровне именования методов и разбития кода на логические блоки в рамках этих методов.
Ну да. А как еще ты хотел код писать? По 1 строчке в день? Когда с таким подходом ты свой калькулятор, который может в порядок действий - сделаешь? Через 10 лет?
Какой-то у тебя ограниченный выбор, наверно обусловлен ограниченностью твоего ума.
Ну смотри, с момента как я предложил показать как надо - прошло уже 45 минут почти. Уж за это время-то, тот кто знает как надо - 100 строк написал бы.
Пока что я вижу что кроме как посты на борде писать - ты ничего больше не можешь. Потому твое ревью - не ревью. Жду более конструктивного анона.
Ты очень токсичный, еще и тестовое задание брать не хочешь, зачем мне платить тебе? Хоть одну причину назови?
Давай начнем с простого, вот ручка, продай ее мне.
>эти коммиты на русском языке
>эти XML-комментарии для каждой строки
Ладно, это я доебываюсь. А если серьезно: какой нахуй кодревью. Написал? Работает? Молодец, начинай писать что-то посложнее. Похуй, что оно лагает на миллионе клеток, похуй, что у тебя все "в мейне". Пиши программы или те же игры, только посложнее уже, и используй методы и классы по своему усмотрению. Наговнокодишь 10-20 программ, в которых разбираться, фиксить баги и расширять функционал невозможно - станешь лучше понимать, когда стоит ебашить классы, когда не стоит, а когда задача настолько проста, что делается в мейне. А пока что позаботься о более выразительном нейминге и не сри комментариями (тем более трехстрочными XML-ами) там, где суть ясна из названия или из кода. На комментарии ты только время проебешь, они тебе не нужны сейчас.
Как вывести 500кк $ через битки в валюту в расии?
Сижу гуглю уже ебаный час и НИХУЯ, как будто никто и не знает про эту функцию. Может тут кто-то знает?
Это копия, сохраненная 29 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.