Задать вопрос
  • Есть ли смысл изучать ASP.NET?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Есть ли смысл изучать его ради маленьких в пару страниц сайтов (но всё же серверным функционалом, не просто "отдать html по ссылке")?

    Для таких целей вам подойдет та часть asp.net которая называется Razor Pages. Как раз познакомитесь с шаблонизацией страниц.

    Но вообще, использование aspnet предполагает более глубокое знание языка. Поразбираться придется. Так что если не хотите тратить время, лучше остаться на простых страничках.
    Ответ написан
    Комментировать
  • Есть ли смысл изучать ASP.NET?

    Есть ли смысл изучать его ради маленьких в пару страниц сайтов (но всё же серверным функционалом, не просто "отдать html по ссылке")?

    Для продакшена - да. HttpListener даже на линуксе вроде не будет работать, тк зависит от http.sys

    Какие у него есть киллер-фичи, облегчающие жизнь?

    1. Быстрый
    2. Гибкий
    По сравнению с httplistener.
    я слегка пересрался от вида "пустого проекта asp net" в visual studio.

    Ну там он действительно немного страшный, в .NET 6 его сделают чуть менее страшным.
    Вообще минимальный проект выглядит примерно так:
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHost(webBuilder =>
        {
            webBuilder.UseKestrel(o =>
            {
                o.ListenLocalhost(5000);
            });
            webBuilder.ConfigureServices(services =>
            {
                services.AddRouting();
            });
            webBuilder.Configure(app =>
            {
                app.UseRouting();
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapGet("/", async context =>
                    {
                        await context.Response.WriteAsync("Hello World!");
                    });
                });
            });
        })
        .Build()
        .Run();

    В .NET 6 будет MinApi, который выглядит вот так (без юзингов):
    var app = WebApplication.Create(args);
    
    app.MapGet("/", string () => "Hello World!");
    
    app.Run();
    Ответ написан
    Комментировать
  • Насколько Golang подходит для больших проектов?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    У go одно применение - highly network intensive applications. GRPC, protobuf, триллионы rpc вызовов в секнду. Применяется он когда есть или сразу подобные требования или бизнес вырос до этого уровня.

    Для стартапов чаще всего требуются Rapid Applcation Development фреймворки. Язык при этом скорее вторичен. Можешь быстро слепить - молодец. Но чаще выбирать приходится из того что знаешь.

    В кровавом Энтерпрайзе в основном правит старичок Java (за редким исключением) по тому что есть требования к заменяемости сотрудников и большой легаси ландшафт проектов, которые переписывать никто не будет
    Ответ написан
    1 комментарий
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    Go > PHP:

    1. Приложения, в которых на инициализацию тратиться очень много времени и это критично. Грубо говоря, когда умирающая модель выполнения не подходит.
    2. Приложения, в которых нужно много памяти для обработки.
    3. Приложения, в которых необходима мультипоточность и реализация задержек во времени.

    PHP > Go:

    1. Приложения, в которых важна скорость разработки, а производительность на втором плане.
    2. Приложения, в которых важна легкость горизонтального масштабирования. Грубо говоря там, где умирающая модель оптимальна.
    Ответ написан
    3 комментария
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    @mitya_k
    • Первая, причина, Go популярен за свою бедность синтаксиса, кому-то это нравится...
      Для больших компаний типа Google это плюс так, как можно посадить посадить 100500 программистов, которые вынуждены писать очень много однотипного болерплейта кода.
    • Вторая причина, там где требовалось решать низкоуровневые задачи, без бизнес-логики(например, много работать с байтиками), плюс требовалась многопоточность для этого приходилось использовать СИ++. Теперь есть простая альтернатива в виде Go. Опять же это актуально для больших компаний, где есть подобные задачи. Например, писать какой-нибудь парсер террабайтных логов
    • И последняя, можно сгенерить бинарь без зависимостей, что нравится работающим в DevOps, а для скриптования "богатый язык" особо не нужен. Опять же актуально для больших компаний, где есть большие отделы DevOps


    Из всех 3 пунктов вытекает зарплата и популярность в больших компаниях.
    Ответ написан
    Комментировать
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    Супер превосходства в производительности и не будет. Но при правильной архитектуре будет нормальное превосходство.
    В nodejs, например, чтобы распараллелить задачу на несколько ядер, нужно делать много доп. движений, вручную раскидывая задачи. В Go это делается автоматически и гораздо удобнее, просто используешь горутины, а рантайм сам беспокоится о том, запустить их конкурентно или параллельно. Ну и плюс, в го ты просто пишешь последовательный код, вместо колбэков, это легче.
    Строгая статическая типизация дает возможность вылавливать много проблем до релиза, код просто не скомпилится, вместо того, чтобы упасть в продакшне. Это очень критично для крупных проектов, над которыми работает много людей. Рефакторинг тоже проще по этой причине. Пхп и нода не дают такой возможности.
    Разработчики на го не редкие и не дорогие, они довольно быстро воспитываются из разработчиков на других языках, что тоже удобно компаниям. Плюс, код довольно стандартен, на го почти нет нескольких способов сделать одно и то же, он прививает единый подход.
    Сумма этих всех факторов и является причиной популярности го.
    Ответ написан
  • В каких приложениях Go существенно эффективнее чем Node.js и PHP?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Бенчмарки - это хорошо, но очень важно понимать что именно там меряли и почему результаты именно такие.

    Несколько лет назад я тоже делал бенчмарки Python, PHP, Node, Go.
    Для меня были важны две вещи:
    1 - скорость ответа сервера/кол-во запросов в секунду
    2 - объём сервиса в памяти, т.к. от этого зависит стоимость ресурсов

    На тесте, где сервисы не делали запросы в базу - из всех четверых лучше всего отработал Go с приличным отрывом, цифры, к сожалению, уже не помню.

    Но вся эта разница сошла на нет, как только добавился всего один простой SQL запрос в базу, в таблицу с 10 строками. И на этом фоне разница по скорости ответа была меньше 10%.

    Иными словами если ваш сервис работает с базой - критической разницы по скорости работы между Go/Rust/PHP/Node/Java, особо не будет.

    Другое дело если ваш сервис не будет делать запросы в базу, или будет кешировать результаты запросов, тогда вы почувствуете ощутимую разницу.

    Еще очень важно понимать сколько ваш скрипт потребляет ресурсов. Это становится критически важным, когда вы имеете дело с большими нагрузками.

    Один экземпляр Go занимал в памяти порядка 6мб RAM, при том, что Pytho+Django порядка 60мб.
    Node уже не помню сколько, но что-то близкое к Python'у.

    Вот тут уже, когда серверов у вас будет много - количество серверов с Go у вас будет в 10 раз меньше, соответственно расходы за эти сервера у вас будут в 10 раз меньше :)

    В крупных компаниях, где нужны специалисты по Go - там уже есть высокие нагрузки и переход на Go и поиск специалиста обусловлен необходимостью решить в первую очередь проблему с нагрузками, оптимизировать расходы на оборудование.

    Где-то читал статью, что у людей было API на порядка 40 серверов на Node, после переписывания на Go - серверов осталось два, из которых второй запасной :)
    Ответ написан
    13 комментариев
  • Есть ли видимая перспектива у Junior-а?

    Как по мне лучше всего подходит ваш последний вариант: изучить Go уже после PHP.
    Ответ написан
    Комментировать
  • Правильно ли делать сервис менеджер в Go?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    > В UserService может использоваться логика ProjectService'a. Для этого я передаю в userService.New(projectService ProjectService)

    По хорошему в UserService не должно быть логики ProjectService.
    Логику лучше не разносить по разным местам, такой код очень трудно потом поддерживать.
    Представьте, что через год придёт новый человек и внесёт правки в ProjectService, он может не знать/забыть внести нужные правки в UserService.

    Если без этого совсем никак, тогда лучше сделать 3й сервис, который в конструкторе примет сервисы Users и Project и будет вызывать нужные методы из каждого из них.

    В идеале нужно перестроиться и проектировать пакеты так, чтобы таких проблем не возникало.
    Но когда вы перестроитесь - результаты работы будут намного качественнее.
    Мне после Perl, Python понадобилось не мало времени чтобы перестроиться :))
    Но сейчас могу с уверенностью сказать оно того точно стоило!

    Подход как у вас с ServiceManager тоже используется, даже видел библиотеки готовые, но уже не помню как назывались. Я попробовал их, у меня не прижились эти библиотеки )

    Сейчас я использую такой подход:
    users/user.go
    тут описываю структуру Users, простая валидация полей, методы у структуры типа GetFullName и т.д.

    users/repo.go
    тут описываю интерфейсы:
    QueryRepo для извлечения данных
    CommandRepo для внесения изменения в данные пользователей
    репозитории используются только в рамках пакета users, другие пакеты используют интерфейсы сервисов

    users/querysvc.go
    тут описываю интерфейс QuerySvc (только для извлечения данных связанных с пользователей),
    он уже использует интерфейс QueryRepo
    этот пакет будут импортировать другие пакеты

    users/commandsvc.go
    тут описываю интерфейс CommandSvc (только для внесения изменений в данные пользователей), он тоже использует интерфейсы QueryRepo, CommandRepo
    этот пакет будут импортировать другие пакеты

    users/signupsvc.go
    это сервис регистрации пользователей, тут описываю интерфейс SignupSvc

    users/repos/mysql/query.go
    тут реализация интерфейса QueryRepo на MySQL
    этот пакет будет импортироваться только в пакете `app` (см. ниже)

    users/repos/mysql/command.go
    тут реализация интерфейса CommandRepo на MySQL
    этот пакет будет импортироваться только в пакете `app` (см. ниже)

    users/services/querysvc.go
    тут реализация интерфейса QuerySvc

    users/services/commandsvc.go
    тут реализация интерфейса CommandSvc

    users/services/signupsvc.go
    тут реализация интерфейса SignupSvc

    core/
    тут все константы, которые могут быть использованы в разных пакетах приложения (например коды ошибок)
    этот пакет могут включать любые пакеты, но он ничего не импортирует в рамках проекта

    app/
    тут иницализация всех репозиториев, сервисов, конфигов и т.д.
    здесь же происходит связывание всех пакетов.
    Т.е. что-то вроде
    usersQuerySvc := usersservices.NewQuerySvc(usersRepo, ...)
    usersSignupSvc := usersservices.NewSignupSvc(usersQuerySvc, usersCommandSvc)
    // например сервис для админов (с проверкой полномочий), методы которого уже можно использовать в endpoint'ax
    usersAdminSvc := usersservices.NewAdminSvc(usersQuerySvc, usersCommandSvc)
    
    projectSvc := projectservices.New(usersQuerySvc)

    Мне такой подход очень нравится тем, что нет скрытых зависимостей, всё видно как на ладони, кто и что использует.
    А если возникают сложности с применением такой схемы - для меня это верный признак того, что нужно спроектировать иначе, раз сложности уже возникли, значит в будущем их будет еще больше ))

    Ну и все пакеты как параметры принимают везде только интерфейсы.
    Хотя... с точки зрения Dependency Inversion, правильно бы было описывать под каждый пакет свой интерфейс, а не так, как я :), но я делаю интерфейсы очень маленькими, тогда получается очень гибко и, как мне кажется, после этого еще внутри других пакетов описывать интерфейсы уже избыточно в моём случае, работы больше, а толку не так много, по этому пока экономлю на этом время :)

    cmd/serve.go - импортирует app и запускает веб сервер например

    Если нужны будут еще какие то подробности - пишите, буду рад помочь
    Ответ написан
    Комментировать
  • Текущее положение Golang в машинном обучение?

    sgjurano
    @sgjurano
    Разработчик
    Можно запускать либы, написанные на C из Go, но зачем?

    Люди выбирают Go в основном из-за умного планировщика, который позволяет удобно работать с сетью. ML сюда не ложится примерно никак, тем более что большинство DS знают Python и это значит, что подходящих людей найти гораздо легче.

    Пожалуй единственная нормальная причина использовать ML-библиотеки на Go — это когда у вас уже есть сервис на Go, к которому надо прикрутить немножко ML.

    Если же вы пишете новый сервис, где планируется активное использование ML-библиотек, то для невысокой нагрузки прекрасно подойдёт Python, а для высокой лучше всё же сразу взять C++ или какой-нибудь другой язык прозрачно совместимый по памяти с C.

    Поэтому мне кажется, что ML-библиотеки на Go так и будут капитально отставать от Python — они там просто почти никому не нужны, вот их и не развивают.
    Ответ написан
    4 комментария
  • Как вызвать метод на блейзор клиенте?

    Ошибка говорит, что HttpClient в блазоре не поддерживает Proxy
    А в коде вашей либы есть такой код
    public RestClient(Uri baseUrl, JsonSerializer serializer, IWebProxy proxy = null)
            {
                BaseUrl = baseUrl;
                Serializer = serializer;
                DefaultQueryString = new List<KeyValuePair<string, string>>();
    
                MaxRetryCount = 0;
                Proxy = proxy;
    
                HttpClient = new HttpClient(new HttpClientHandler
                {
                    Proxy = proxy // Вот из-за этой строчки происходит падение.
                });
            }


    Есть три варианта решения:
    1. Сделать форк либы и поправить эту строку.
    Но не факт, что это единственная строчка, которая вызывает несовместимые API
    2. Вызывать этот код на сервере, а клиенту передавать только данные.
    3. Написать собственный клиент для imdb
    Ответ написан
    Комментировать
  • Как убрать No 'Access-Control-Allow-Origin' от CORS, если в URL нету знака вопроса?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В определённых случаях браузер делает preflight request. Сначала ресурс запрашивается методом OPTIONS, на который браузер рассчитывает получить ответ 200 с установленными CORS-заголовками. И только если этот запрос прошёл, то делается основной запрос.
    Проверьте, что ваш сервер нормально отвечает на OPTIONS.
    Ответ написан
    9 комментариев
  • Компиляция .NET приложения в машинный код?

    - Один выходной бинарник.
    - Скорость близкие к C++.
    - Запуск на машине "как есть" (без необходимости установки дополнительного по).

    Это достигается и без AOT.
    Скорость близкую к плюсам и так обеспечивает JIT-компилятор.
    Запуск на машине как есть - Self-contained.
    Один бинарник - Single File Executable

    Как на данный момент обстоят дела с данной технологией, есть ли подвижки в расширение поддерживаемых продуктов (не только UWP)?

    Вроде в .NET 6 обещают Full AOT
    Ответ написан
    Комментировать
  • Что лучше использовать Redux или Context?

    mbelskiy
    @mbelskiy
    Software Developer
    TLDR: Лучше использовать то, что подходит для решения конкретных задач в вашем приложении.

    В простом приложении сойдёт и контекст. Начнёт приложение разрастаться, контекста будет не хватать, начнешь накручивать логику. Получится свой редакс на минималках, но скорее всего с худшей реализацией.

    Голый редакс в 2021 лучше не брать. Смотри сразу в сторону redux-toolkit. Если нужен "стор" для кэша данных от веб-сервера, есть смысл посмотреть на redux-toolkit query, буквально неделю как релизнули.

    Хорошая статья по этой теме: https://blog.isquaredsoftware.com/2021/01/context-...
    Ответ написан
    2 комментария
  • Как ускорить mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Любые вопросы про "ускорение mysql" необходимо сопровождать не голословными заявлениями "Слющай, использует индексы, мамом клянус!", а ВЫВОДОМ EXPLAIN
    Без которого вопрос в принципе не имеет смысла, и должен удаляться.

    Плюс неплохо сразу выкатить результат SHOW ENGINE INNODB STATUS
    Ответ написан
    Комментировать
  • Какая среда разработки на JavaScript для продвинутых?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Что вам мешает самому почитать https://www.jetbrains.com/ru-ru/webstorm/

    Я вот непонял Вебшторм типа специально под JS создан или что?


    Кажется я понимаю в чем суть вашего вопроса )

    Sublime – это просто редактор кода. Может там и есть какие-то плюшки. но по минимуму.

    WebStorm – это IDE. Интегрированная среда разработки. Здесь уже не просто редактор с плюшками. А целый комбайн с функционалом на все случаи жизни.
    Ответ написан
    9 комментариев
  • Как реализуется вывод сообщения об отсутствии соединения?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    window.addEventListener('online', () => {
      // связь есть, скрыть уведомление
    });
    
    window.addEventListener('offline', () => {
      // связи нет, показать уведомление
    });
    Ответ написан
    2 комментария
  • Что использовать для Desktop UI на C#?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Ежели нужно что-то совсем хисптерское, кросс-платформенное, на переднем краю технологий, то MAUI конечно же.

    А если серьезно и у вас только windows то возьмите WPF.
    Ответ написан
    Комментировать