Задать вопрос
  • Как постепенно перекочевать из Web в Machine Learning максимально безболезненно?

    @asd111
    Из языков строго python. Он похож чем то на Golang и на javascript так что сложностей в использовании не возникнет. С++ и R сразу нет. Потому что на С++ пишут в основном только сами библиотеки для ML либо что то очень быстрое наподобие анализа видеопотока в автопилотах и даже тогда прототип пишут на python, а R практически не развивается по сравнению с python и имеет более узкую сферу применения чем python.
    В плане обучения можно сделать так:
    1. Прочесть хорошую книгу по теме, потому что нужно знать термины и основные алгоритмы. Ну или хотя бы посмотреть курсы Andrew Ng Machine Learning. Для применения чужих библиотек на простых задачах этого в принципе достаточно.
    2. Глянуть scipy, numpy и jupyter notebook. У scikit есть scikit learn, в котором реализованы некоторые популярные алгоритмы. Например SVM, decision trees и т.д. и есть доки под это дело для начинающих scikit-learn.org/stable
    3. Зарегистрироваться на kaggle.com и найти задачу про титаник. Вот она https://www.kaggle.com/c/titanic Делаете решение как умеете. Можно взять простой gradient boost. Yandex как раз недавно выложил либу под это дело называется cat boost https://tech.yandex.ru/catboost/ Банальное использование этой библиотеки может дать около 80% точности. Вот туториал https://github.com/catboost/catboost/blob/master/c...
    4. Прочитать про keras. Взять готовую модель для смешивания стилей изображений и сделать сайт наподобие ostagram.ru для смешивания изображений. https://github.com/fchollet/keras/blob/master/exam...

    5. Дальше всё зависит от вас, поскольку заработать в области ML непросто :) Когда прочтете хотя бы одну книгу по ML, регистрируйтесь здесь ods.ai - это сообщество русскоговорящих специалистов в данной области.
    Ответ написан
    Комментировать
  • Кто нибудь применял или видел generics в серьезных Go проектах?

    Одно из самых полезных применений дженериков, которое у меня было — это написание врапперов, которые добавляют строгую типизацию в обработку чего-либо и уменьшают бойлерплейт. Например, обработка http-запросов. Обычно используется роутер и в него регистрируются хендлеры для разных путей, например:
    router := httprouter.New()
    
    router.POST("/api/products", productsHandler.Handle)
    router.POST("/api/get_free_slots", getFreeTimeSlotsHandler.Handle)
    router.POST("/api/create_visit", createVisitHandler.Handle)


    При этом, функция Handle у каждого хендлера это обычно что-то типа func(w http.ResponseWriter, r *http.Request)
    Хендлер уже внутри себя сам читает тело, парсит его из json, потом формирует ответ, итд.

    Хотелось добавить сюда типизацию и какую-то структуру, поэтому я написал
    простой враппер

    type Validatable interface {
    	Validate() error
    }
    
    func Wrap[Req Validatable, Res any](fn func(ctx context.Context, req Req) (Res, error)) httprouter.Handle {
    	handler := func(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) {
    		writeError := func(statusCode int, err error) {
    			writer.WriteHeader(statusCode)
    			_, _ = writer.Write([]byte(err.Error()))
    		}
    
    		var req Req
    
    		bytes, err := io.ReadAll(request.Body)
    		if err != nil {
    			writeError(http.StatusBadRequest, err)
    			return
    		}
    
    		if err := json.Unmarshal(bytes, &req); err != nil {
    			writeError(http.StatusBadRequest, err)
    			return
    		}
    
    		if err := req.Validate(); err != nil {
    			writeError(http.StatusBadRequest, err)
    			return
    		}
    
    		resp, err := fn(request.Context(), req)
    		if err != nil {
    			writeError(http.StatusInternalServerError, err)
    			return
    		}
    
    		respBytes, err := json.Marshal(resp)
    		if err != nil {
    			writeError(http.StatusInternalServerError, err)
    			return
    		}
    		writer.WriteHeader(http.StatusOK)
    		_, _ = writer.Write(respBytes)
    	}
    
    	return handler
    }



    Он берет на себя весь бойлерплейт по парсингу и валидации запроса, формированию ответа, работы с кодами, итд. Причем, через стандартный errors.Is иногда добавлял сюда еще возможность из хэндлера указать врапперу, какой http-код ответа отдавать. Обычно все функции враппера делал под конкретную задачу в конкретном проекте (можно, например, не только json тела парсить, но и урл и хедеры, итд).

    Использование враппера выглядит так.
    Мы пишем хэндлер, используя конкретные типы

    type Handler struct {
    	userService *usersvc.Service
    }
    
    type Request struct {
    	UserID int64 `json:"user_id"`
    }
    
    func (c Request) Validate() error {
    	if c.UserID == 0 {
    		return errors.New("empty user id")
    	}
    	return nil
    }
    
    type Response struct {
    	Name string `json:"name"`
    	Age  int    `json:"age"`
    }
    
    func New(userService *usersvc.Service) *Handler {
    	return &Handler{userService: userService}
    }
    
    func (h Handler) Handle(ctx context.Context, req *Request) (*Response, error) {
    	user, err := h.userService.UserByID(ctx, req.UserID)
    	if err != nil {
    		return nil, err
    	}
    
    	return &Response{
    		Name: user.Name,
    		Age:  user.Age,
    	}, nil
    }



    Через dependency injection даем хэндлеру все источники данных, изолируем хэндлер в отдельном пакете, четко прописываем ему типы Request и Response, пишем валидацию для запроса. Открыв хэндлер, разработчик сразу видит его контракты, весь бойлерплейт во враппере, остается написать только логику.

    В итоге использование такого хэндлера+враппер выглядит так:
    getUserHandler := getuser.New(userSvc)
    
    router := httprouter.New()
    
    router.POST("/api/get_user", wrapper.Wrap(productsHandler.getUserHandler))


    Причем, тут даже не видно, что Wrap() имеет дженерик-параметры, потому что гошка самостоятельно выводит эти параметры из типов Request и Response из хэндлера и проверяет, что у Request есть метод Validate.

    Подобные дженерик-врапперы применял в нескольких разных задачах. Кроме обработки запросов еще была система для запуска фоновых джоб по обработке данных, нужно было положить джобы в один слайс, но при этом, чтобы контракты джоб были типизированы. Поэтому враппером приводил конкретные типы структур из джоб к более универсальному виду с типами в interface{}. Получилось, что и типы все на компиляции проверяются и могу положить все джобы в одну коллекцию.
    Ответ написан
    Комментировать
  • Как обосновать применение реляционной БД на интервью по System Design?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Обоснование в данном случае очень простое:
    • Данная БД позволяет решить задачу?
    • Она соответствует требованиям задачи?

    Положительный ответ на вот эти два вопроса в целом достаточное обоснование. Что-то более сложное - это надо проводить исследования, собрать прототип, провести тестирование решения, возможно даже для нескольких разных БД, сделать сводную таблицу результатов, подвести итоги исследований. Вот тогда да, будет "сильное" обоснование. "Сильное обоснование" входило в условия ТЗ? Если не входило и вы не делали - то в данном случае не вы "сели в лужу", а те, кто проводил интервью. Возможно, надо было уточнить, какое именно обоснование они хотят получить и сколько они готовы за это заплатить. ТЗ было какое? Решить конкретную задачу в определённых рамках. Вы её решили успешно? Значит, вы молодец и всё отлично.
    Ответ написан
    Комментировать
  • Как обосновать применение реляционной БД на интервью по System Design?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Реляционные СУБД способны решать наиболее широкий круг задач, при этом менее требовательны к ресурсам, чем noSQL, что делает их решением по умолчанию, пока нет специфических проблем, требующих поиска специфических решений. Кроме того, реляционки более распространены, так что компании легче будет нанять и программистов и DBA для работы с ними.
    Ответ написан
    Комментировать
  • Выбор между SQL и NoSQL документооринтированной базой данных?

    В postgres можно искать по геоиндексам при помощи postgis.
    Для текстового поиска по описанию в постгресе есть полнотекстовый поиск.
    Произвольные поля можно добавить через колонку с jsonb.

    Так как нет никаких дополнительных данных, по которым можно было бы выбрать, я бы предложил взять постгрес, тк он вроде как все перечисленные нужды закрывает и не будет раздувать инфраструктуру, ведь вы уже собираетесь его использовать для хранения пользователей.
    Ответ написан
    1 комментарий
  • Выбор между SQL и NoSQL документооринтированной базой данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Тут нет никакого выбора.

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

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

    Соответственно, если говорить про базу данных, то выбор очевиден - Постгрес.
    Но если речь про поиск, то так и надо формулировать - "что использовать для поиска по базе данных?". И тут ответ тоже будет очевидный - Эластик (ну или любой другой поисковый движок - солр, мантикора, и так далее). Который и будет искать по информации, хранящейся в базе данных.

    Но это только если у вас действительно веб-приложение. Если же у вас стильный энергичный молодёжный стартап, целью которого является проесть деньги инвестора, то Монго - а ещё лучше Равен - будет идеальным выбором. Это же мечта любого говнокодера маститого разработчика - не нужно корпеть над структурой базы данных, мучиться с внешними ключами, вдумчиво расставлять индексы - а просто валить всё в одну кучу!
    Ответ написан
  • Какие ошибки в понимании объектов?

    Maksim_64
    @Maksim_64
    Data Analyst
    (3).__class__- здесь объект создался, затем ты обращаешься к его атрибуту.

    3.__class__ - здесь при его создании произошла ошибка (если быть точным даже на стадии парсинга ошибка), питон пытается спарсить, как float, и у него естественно не получается.
    Ответ написан
    Комментировать
  • Как запустить сервер фронтенд, бэкенд и тг бота на одном хостинге (сайте)?

    @Everything_is_bad
    Покупаешь VPS и всё разворачиваешь на нём, как именно в инете куча статей, но лучше почитай что написано про деплой в доках тех фреймворков, которые ты использовал.
    Ответ написан
    1 комментарий
  • Какую выбрать оболочку для совместной работы - визуализация архитектуры с возможностью описания PlantUML?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Diagrams.net - отлично работает как в гугл докс так и локально.
    Альтернативное и тоже интересное решение - mermaid, тоже можно запустить у себя локально.
    Ответ написан
    Комментировать
  • Артефакты на экране. Что делать?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    С высокой долей вероятности неисправность видеокарты: видеопамять или видеочип. Или монитор: подключите монитор к другому ПК или другой монитор/телевизор к этому ПК, а так же проверьте кабели монитора. С меньшей долей вероятности неисправность оперативной памяти или процессора. Следует скачать загрузочный образ memtest86 и провести полную диагностику оперативной памяти, затем нагрузочный тест процессора аидой или еще чем-то. Если всё нормально, то дальше тестировать видеокарту: либо заменить на исправную либо переставить текущую в другой ПК. Если подтвердится, что проблема в видеокарте - то её в сервис. Как минимум - перепайка чипов памяти или GPU, как максимум - их замена.
    Ответ написан
    2 комментария
  • Почему сайты отказываются от GET параметров на станицах?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Человечество развивается, люди становятся умнее, начинают наконец понимать стандарты. Ну, кроме разработчиков битрикса, конечно.
    Ответ написан
    Комментировать
  • Можно ли вывести градацию уязвимостей?

    hint000
    @hint000
    у админа три руки
    Человеческий фактор - всегда главная угроза.
    Предполагаю что самое слабое звено - это то что всегда торчит наружу, т.е. сайт.
    Сам по себе сайт не создаёт дыру. Её создаёт "человеческий фактор" -
    • админы, которые что-то неправильно настроили,
    • программисты, которые наделали ошибок,
    • тестировщики, которые пропустили ошибки,
    • менеджеры, которые дали неправильные распоряжения админам, урезали сроки тестирования, урезали бюджет на железо и ПО для ИБ, проигнорировали предупреждения подчинённых, не провели аудит,
    • рекрутеры, которые нарекрутили всех этих аболтусов. :)
    Всё это - человеческий фактор, а не только какой-нибудь бухгалтер, попавшийся на фишинг.
    Ответ написан
    Комментировать
  • Как устроиться на работу Data Engineer?

    Maksim_64
    @Maksim_64
    Data Analyst
    Откликайся на все что связанно с данными, не нужно пытаться зайти именно в data engineer. В большинстве компаний которые работают с данными нет такой позиции.
    Ответ написан
    2 комментария
  • Как скачать несколько файлов за раз?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Мануал, опции ФС, первая же строчка: https://github.com/yt-dlp/yt-dlp?tab=readme-ov-fil...
    Ответ написан
    Комментировать
  • Какие книги посоветуете по нейросетям?

    Maksim_64
    @Maksim_64
    Data Analyst
    Для новичков ответ очевиден, нет ничего и близко равного Deep Learning with Python, Second Edition . От инженера гугла и создателя Кeras François Chollet. Она и на русском есть, если не владеешь английским. Не много не мало гениальная книга, и доступна для людей без математического бэкграунда.
    Ответ написан
    1 комментарий
  • Можете порекомендовать книги для практических заданий Python Data Science?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. От создателя pandas 3-е издание его легендарной книги Python for Data Analysis, 3E Веб версию, книги он сделал бесплатной. Для новичков шикарно, основные библиотеки плюс jupyter.

    2. От профессоров стенфорда, класика по DS с 2023 python edition (с лабараториями и сложными упражнениями). Так же доступна бесплатно. An Introduction to Statistical Learning
    Ответ написан
    3 комментария
  • Как замазать свободную область от картинки?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Расположить такую же картинку позади и растянуть ее на весь блок. Чтобы не было искажений, установить object-fit:cover; Либо повесить на фон с заполнением background-size: cover;
    Заблюрить с помощью filter: blur(10px);

    Ответ написан
    1 комментарий
  • (РЕШЕНО) Какие VPN работают?

    @AlexVWill
    Нужен VPN сервер на VPS, расположенном на территории России, для доступа к домашнему роутеру из вне

    Для этого не нужен VPS, достаточно получить статический IP и поднять на роутере или домашней машине VPN сервер. Из протоколов, которые не блочатся пока это SSTP и IPSec (второй как то блочили, но, видно у РКН закончилось помутнение рассудка, и теперь он опять работает).
    Вообще, при наличии статического IP и VPN не нужен для указанной задачи, просто он повышает сильно безопасность. А при наличии просто белого не статического IP (от РТК к примеру) можно вообще обойтись тем, что есть, подняв на роутере какой то DynamicDNS клиент.
    Ответ написан
    7 комментариев