Задать вопрос
  • Какое ПО выбрать для школьных звонков?

    @Drno
    Azuracast... и локально запущенный VLC плеер - работает в более чем 300х точках по стране, удобные плейлисты итд

    Radioboss если прям винду хочется
    Ответ написан
    Комментировать
  • Подводные камни удаленной работы на организацию в другом регионе РФ (с оформлением в штат)?

    @res2001
    Developer, ex-admin
    Одно время работал на компанию, находящуюся на другом конце страны, разница во времени 8 часов. Все нормально. Когда надо было пообщаться с офисом приходилось предпринимать дополнительные действия - встать рано или наоборот. При приеме это все обсуждалось, график работы зафиксирован в договоре.
    С трудовой проблем не было - отправил почтой первым классом. У меня то же были опасения на счет трудовой и я перед отправкой сделал нотариально заверенную копию, не пригодилась. Потом оформил электронную трудовую, что и вам рекомендую (это должен делать работодатель, вам надо только написать заявление).
    Почта, кстати, работает нормально. Заказные письма ходят достаточно быстро, ни разу косяков не было. Первый класс - чуть дороже и чуть быстрей, но не критично. Только надо определится с оптимальным временем посещения этого заведения, т.к. в часы пик там обычно много народу. У меня до сих пор оптимально 12-16.

    Трудовой договор и прочие документы можно отправлять обычным заказным письмом.
    Хорошо иметь дома принтер (подойдет черно-белый), т.к. регулярно надо будет что-то печатать/подписывать/пересылать, не часто, но 3-4 раза в год точно.

    В другом месте работы меня позвали на 2 недели на стажировку, так что все документы привез сам. Перед стажировкой все собеседования уже прошли и решение о приеме уже было принято. Стажировка по факту не особо была нужна, но было полезно в том плане, что познакомился с коллективом и с начальством лично, ну и плюс все оформление прошло на месте. Контора оплатила проживание и билеты.

    Еще один момент - если в вашем регионе или в регионе работодателя действуют полярки и/или северные коэффициенты (надбавки к окладу), то на этом надо заострить внимание, т.к. от региона к региону коэффициенты разные. Вы должны получать эти надбавки согласно месту вашей работы - в трудовом договоре должно быть указано, что вы работает по месту нахождения (жительства) и ваш регион. Работодатели порой сами не особо этот момент просекают, потом пытаются задним числом исправлять. Сам ходил по этим граблям. В Москве этих надбавок нет, но в регионе работодателя они могут быть.
    Ответ написан
    1 комментарий
  • Как «задеплоить» на heroku nestjs + angular?

    lssssssssssl
    @lssssssssssl
    1. Делаете ng build в angular проекте
    2. Кладёте результат билда( папку dist ) в свой проект на nestjs в папку client(Или любое другое имя на ваше предпочтение в корне проекта, кроме папки dist, ежели она обновляется после каждого build nestjs)
    3. Настраиваете nestjs для работы со статикой https://docs.nestjs.com/recipes/serve-static
    4. Делаете build проекта на nestjs
    5. В package.json проверяете наличие команды "start:prod": "node dist/main"
    6. Запускаете команду, смотрите всё ли корректно работает(Видна ли статика)
    7. Делаете деплой полученного nestjs приложения, как обычное nestjs приложение. Про ангуляр можно уже забыть, так как он превратился в простой js код в папке client. Считайте, что он стал полноправной частью nestjs кода

    Папку client в .gitignore или любой другой игнор добавлять, конечно же, не нужно
    Проблем с корсой не будет в этом случае
    Ответ написан
    1 комментарий
  • Как удалить ненужные базы?

    tsklab
    @tsklab Куратор тега SQL Server
    Здесь отвечаю на вопросы.
    Предварительно
    Список баз данных:
    SELECT name
      FROM sys.databases
      WHERE owner_sid <> 0x01

    Используя встроенную таблицу 1С _UsersWorkHistory получить дату последнего изменения. Скрипт в помощь.

    Список баз данных и дата последних изменений:
    DECLARE @DBD TABLE ( [Name] VARCHAR(100), [Date] DATETIME)
    DECLARE @N NVARCHAR(100), @D DATETIME
    DECLARE @Q NVARCHAR(100), @P NVARCHAR(100) = '@DD DATETIME OUTPUT'
    DECLARE DB CURSOR FOR
      SELECT [name]
        FROM sys.databases
        WHERE owner_sid <> 0x01
    OPEN DB
    FETCH NEXT FROM DB INTO @N
    WHILE @@FETCH_STATUS = 0
      BEGIN
        SET @Q = 'SELECT @DD = MAX(_Date) FROM ' + @N + '.[dbo].[_UsersWorkHistory]'
        BEGIN TRY  
          EXECUTE sp_executesql @Q, @P, @DD = @D OUTPUT
        END TRY  
        BEGIN CATCH  
          SET @N = @N + ' Not 1C'
          SET @D = NULL
        END CATCH      
        INSERT @DBD VALUES (@N, @D)
        FETCH NEXT FROM DB INTO @N
      END
    CLOSE DB
    DEALLOCATE DB
    SELECT * FROM @DBD
    GO
    Ответ написан
    3 комментария
  • Как выбрать базу данных?

    @rPman
    Ни один адекватный разработчик не будет не разобравшись с задачей писать 10k событий как отдельные события, в подавляющем большинстве случаев данные собираются в пакеты и только тогда пишутся, причем зачастую можно так и хранить.

    Потому что все зависит от того, как читаешь эти данные и как ищешь в них. И возможна ли модификация данных (наиважнейший вопрос, отрицательный ответ на который позволит через партиционирование убрать зависимость скорости от объемов данных)

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

    Отделяй модуль/место сбора оперативных данных от их анализа, например делай две базы, отличающиеся как по месту размещения так и по типу (например оперативные данные можно просто собирать в ram, с космическими скоростями, без sql отдельным приложением-демоном), а аналитику собирать паралельно и периодически, под задачу.
    Ответ написан
    1 комментарий
  • Он не хочет заполнять пользователей, и я не знаю как сделать что бы заполняло почему ошибка?

    Vindicar
    @Vindicar
    RTFM!
    А с какого перепугу он должен заполнять пользователей, если на момент цикла
    for guild in bot.guilds:
        for member in guild.members:

    бот ещё не подключён к сети?
    Почитай про событие on_ready, там прямо написано:
    Called when the client is done preparing the data received from Discord. Usually after login is successful and the Client.guilds and co. are filled up.

    Т.е. только после этого события имеет смысл обращаться к списку гильдий бота.э
    Ответ написан
    Комментировать
  • Можно ли без высшего образования работать в Геймдеве?

    @MarkusD
    все время мелю чепуху :)
    Без вышки работать можно не только в геймдеве. Вообще везде можно работать. Это иногда даже негласно приветствуется.
    За такую работу можно даже получать некоторые деньги, которых будет хватать на жизнь.

    Я работал с несколькими самородками. Эти ребята - реальные спецы своего дела. Вышка им бы только мешала в их работе, оттягивая на себя их реально ценное время. Они многого добились и продолжают добиваться. Это такие немного особые люди. А для всех остальных людей без образования будут мои следующие строки.

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

    Оттарабанить 4-6 лет, вытягивая лямку нормативов на экзаменах без четкого понимания требований к тебе - это пустить деньги и время на ветер.
    В ВУЗ нужно идти за обучением самоконтролю, за обучением самодисциплине, за обучением самоорганизации. Вот те самые навыки, которые сегодня дает ВУЗ. Диплом магистра, бакалавра или специалиста - это дополнительный бонус. Разовьешь эти навыки самостоятельно - станешь одним из точно таких же самородков.
    В ВУЗ стоит идти за трамплином к знаниям. Чаще всего человека надо только подтолкнуть чтобы он стал специалистом. А толчком таким и является программа базового обучения в ВУЗе. Обучение базовое потому что его для последующей работы все равно хватать не будет. Дальше с этого трамплина нужно рвать во весь опор, находя и усваивая самые важные и самые нужные для своей работы знания. Осилишь найти все эти знания сам - ну чтож, ты один из немногих способных.
    По окончании ВУЗа человек не выпускается готовым к работе. На этом этапе он обладает только самыми базовыми навыками и дальше нужно продолжать учиться по профилю работы. Для этого есть стажировки, квалификационные курсы, а так же разнообразные книги и циклы статей для самостоятельного обучения.
    ВУЗы не готовят людей к работе, ВУЗы готовят людей к самостоятельной профессиональной подготовке.

    Люди без вышки спокойно работают в геймдеве рядовым персоналом десятки лет без шанса и желания повышения. Деньги идут, работа делается, проблем нет. Кое-где я таких людей наблюдал целыми отделами. Прекрасно работают, их все устраивает. Некоторым людям не нужны перспективы карьеры или роста, это нормально. А значит, таким людям и вышка тоже не сильно нужна.
    Ответ написан
    1 комментарий
  • Что отвечать на вопрос, зачем\почему обновил резюме?

    vitya_brodov
    @vitya_brodov
    Java dev
    Скажите что Вы оцениваете свою конкурентоспособность на рынке труда, чтобы идти в ногу со временем. Так как для IT-специалистов это нормальная практика
    Ответ написан
    Комментировать
  • Какой почтовый сервер быстро и просто можно использовать для тестирования отправки сообщений на email через laravel на localhost?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Настройки Laravel

    MAIL_MAILER=smtp
    MAIL_HOST=localhost
    MAIL_PORT=25
    MAIL_ENCRYPTION=null


    Программа являющая собой тестовый smtp сервер https://toolheap.com/test-mail-server-tool/
    screenshot.gif

    И всё!

    Запускаем программу, указываем пару настроек (на скрине) и спокойно отправляем почту.
    Если на компьютере установлен почтовый клиент, письма будут автоматически открываться в нём (на самом деле, в любой программе, ассоциированной с eml-файлами) моментально при получении.
    Если выключить программу, можно протестировать ошибки отправки почты.

    Пару лет пользуюсь этой утилитой, всё отлично работает.
    Проблема может быть только в просмотрщике писем, в том смысле, что не все клиенты одинаково отображают письма. Но если вам нужно тестировать отправку и содержимое писем, а не их верстку, то всё отлично.
    Ответ написан
    1 комментарий
  • Как обнулить счетчик авто-инкремента в postgresql?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    В отличии от MySQL где TRUNCATE TABLE автоматически сбрасывает авто инкремент, в PostgreSQL нужно добавить ключ RESTART IDENTITY
    TRUNCATE TABLE tbl RESTART IDENTITY;

    run sql oline
    Ответ написан
    Комментировать
  • Как вставить аргумент функции между $$ $$ строкой в PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Напрямую запросом, без лишнего execute
    CREATE OR REPLACE FUNCTION example(arg int)
    RETURNS int4
    LANGUAGE plpgsql
    AS $$
    declare
       out int;
       BEGIN
       --function body
       SELECT field * arg into out FROM randomtable;
       return out;
       END
       $$;
    select example(1);


    Или, если действительно нужно генерировать динамический SQL, то передать параметром в using:
    CREATE OR REPLACE FUNCTION example(arg int)
    RETURNS int4
    LANGUAGE plpgsql
    AS $$
    declare
       out int;
       somequery text;
       BEGIN
       --function body
       somequery := $q1$ SELECT field * $1 FROM randomtable $q1$;
       EXECUTE somequery into out using arg;
       return out;
       END
       $$;
    Ответ написан
    Комментировать
  • Где правильно вызывать и прописать функцию для обработки данных из бд на стороне django?

    iggor-markin
    @iggor-markin
    Python Developer
    Как вариант:
    • views — подготовка данных запроса, вызов бизнес логики, подготовка ответа
    • serializers — сериализация данных, простая валидация
    • services — простые функции с бизнес правилами или классы (Service Objects)
    • managers — содержит в себе правила работы с данными (доступ к данным)
    • models — единственный окончательный источник правды о данных


    Источник: Архитектура в Django-проектах
    Ответ написан
    1 комментарий
  • Как можно попрактиковать "интеграцию с API"?

    Newto
    @Newto
    На самом деле интересный вопрос. Я вот, за всё время свой работы, интегрировал сайты со множеством сторонних систем по REST API. Потом, как-то на собеседовании, на вопрос типа "что вы знаете о REST API", на серьёзных щах, ответил, "да практически всё" и начинал перечислять всякие банки, платёжки, сервисы доставки и т.п. с которыми делал интеграцию. Как вам и написал キム ファイブプラス выше, у некоторых из них были весьма "хитровыдуманные" алгоритмы, одна только интеграция с ЕСИА чего стоила... Однако потом меня спросили: "а как бы вы сами осуществили API в каком-либо сервисе?"... И тут весь мой опыт предыдущих интеграций мне не особенно то и помог, т.к. осуществлять приём ответов откуда-то там -- это одно, а их отдавать и грамотно обрабатывать -- это совсем другое. Поэтому мой совет такой: для опыта интеграции ищите "openapi" у различных сервисов, интегрируйте себе на сайт, если он у вас есть, платёжку от QIWI, например (там есть работа от физ лица). А так же напишите собственное API. Скачайте программу postman, посмотрите какие бывают методы авторизации. Попробуйте реализовать парочку из них, и сделайте грамотную обработку входящих данных, а так же ответ на них, в стандартном json-e.
    Ответ написан
    Комментировать
  • Django - иерархическая структура данных в бд?

    Раз у тебя возникают проблемы с таким тестовым заданием, то на работу тебе ещё рано.
    В целом - гугли любое непонятное слово. Если не находишь "иерархические данные в Django", то попробую чуть более абстрактно. Например узнай, что вообще такое "иерархия".

    В данном случае иерархия - это когда у сотрудника есть начальник, который тоже является другим сотрудником, у которого есть свой начальник и так далее, пока не найдётся главный начальник всех начальников.
    И вот 5 уровней иерархии - это когда есть начальник(1) начальника(2) начальника(3) начальника(4) сотрудника(5).
    В реляционных базах данных такую структуру можно получить при помощи всего одного опционального FK который указывает на собственную же таблицу.

    Как заполнить базу - ну напиши ещё одну программу, которая сгенерирует 50000 записей с нужными условиями.

    но как потом в api передавать иерархию сотрудников

    Как будет удобнее - так и передавай, если в задании не указано, как именно нужно передавать.
    Например можешь передавать как список сотрудников и список связей.
    Можешь просто вернуть дерево (словарь)
    Можешь вернуть список сотрудников, у каждого из которых будет атрибут с id его начальника.
    И так далее.

    И если вы знаток, то подскажите, это вообще тестовое задание на джуна без опыта (так указано в вакансии) или нет?

    Да, вполне похоже на джуна.
    По крайней мере студент, который не прогуливал пары должен обладать всеми необходимыми знаниями.
    Выполнить его можно за вечер или два.
    Ответ написан
    2 комментария
  • Как принять body из POST запроса и вернуть данные на front?

    @serhiops
    Python/JavaScript/C++
    Достаточно странное прописание api...
    class SizeDiskSet(viewsets.ReadOnlyModelViewSet):
    
        queryset = SizeDisk.objects.all()
        serializer_class = SizeDiskSerializer
        permission_classes = [permissions.AllowAny]
    
        def get_serializer_class(self):
            return SizeDiskSerializer

    1.Вы прописали явно класс сериалайзера в атрибутах класса, зачем вы пишете функцию get_serializer_class?
    2. Вы прописуете модификатор доступа permissions.AllowAny, но это поведение по-умолчанию, явно его указывать не нужно(если вы ,конечно, не изменяли значение по умолчанию в settings.py)
    3.Вас не смущает, что вы используете viewsets.ReadOnlyModelViewSet для добавления в базу данных? Разве название не говорит само за себя?

    serializers.py:
    from rest_framework import serializers
    from .models import YourModel
    
    class YourModelSerializer(serializers.ModelSerializer):
        class Meta:
            model = YourModel
            fields = "__all__"  #Выберет все поля, но рекомендуется указываять явно при помощи списка или кортежа:['field1', 'field2']

    api.py:
    from rest_framework.viewsets import ModelViewSet
    from .serializers import YourModelSerializer
    from .models import YourModel
    
    class YourModelViewset(ModelViewSet):
        queryset = YourModel.objects.all()
        serializer_class = YourModelSerializer

    urls.py
    from django.urls import path, include
    from . import api
    from rest_framework import routers
    
    router = routers.SimpleRouter()
    router.register(r'model-list', api.YourModelViewset)
    
    urlpatterns = [
        ...
       path('api/v1', include(router.urls)),
    ]

    Теперь список всех записей будет доступен по ссылке api/v1/model-list/
    По этой же ссылке вы можете делать POST И GET запросы.
    По адресу api/v1/model-list/pk/ Вы получите 1 запись по первичному ключу
    По этой ссылке вы сможете делать GET, PUT, PATCH и DELETE запросы (мб еще какие-то но я другие не использовал).
    После того, как вы все это проделаете можно будет приступить к выполнению задачи. Первое что пришло мне на ум - переопределить метод create, Метод прописан в миксине CreateModelMixin и состоит в классе ModelViewSet:

    from rest_framework.response import Response
    
    class YourModelViewset(ModelViewset):
       #то, что мы рантше писали
       def create(self, request, *args, **kwargs):
            serializer =  YourModelSerializer(data = request.data)
            serializer.is_valid(raise_exception = True)
            serializer.save()
            return Response({"data":serializer.data})

    После этого вам вернутся только что сохраненные данные
    Ответ написан
    Комментировать
  • Существуют ли какие-то устоявшиеся паттерны, если я хочу всё приложение сделать в виде Laravel-Composer-пакетов?

    neuotq
    @neuotq
    Прокрастинация
    Насчёт конкретно подхода о котором вы говорите не скажу, скорее всего это плохая идея. Видел пару примеров несколько лет назад, бОльшая часть этих модульных подходов было нечто среднее между недомикросервисного подохода, с примесью разработки composer пакетов и элементами (концептуальными) плагинов wordpress.
    Или другой подход где "модули" laravel разделялись пространством имен и особой структурой, с некоторыми костылями для поддержки разделения кода. Этот подход формально лучше, но по факту обычное не нужное усложнение проекта. Но если вам интересно, можете изучить https://github.com/nWidart/laravel-modules
    Но как по мне, если уж и заморачиваться в подобном плане, то скорее наоборот отвязкой максимальной ядра приложения от любого фреймворка framework-agnostic подход.
    А так... Главный принцип, в целом кстати во многом пересекается с принципами микро сервисной архитектуры:
    есть определенная часть/логика приложения, которая может выполнять свою функцию независимо, которую могут писать разработчики независимо, можно выделить в отдельный пакет. Например, вы придумали свой крутой прокси изображений, и он как-то явно выходит за рамки вашей бизнес-логики приложения, более того возможно он пригодится в ваших других приложениях (или вы хотите поделиться с миром) делайте отдельный пакет.
    Ну и конечно у таких пакетов, могут быть зависимости в виде других пакетов.
    А вот прям делать декомпозицию приложения на пакеты, ради декомпозиции не стоит. Только если есть конкретный смысл что-то выделить.
    Примеры вот хорошие у Spatie https://spatie.be/open-source?search=&sort=-downloads .
    Там же можно посмотреть, как пакеты зависят друг от друга, например image от image-optimizer.
    Все их, достаточно популярные, пакеты вышли из практики разработки приложений для клиентов.
    Ближе к вашему примеру это проект Nova https://nova.laravel.com/ и тоже имеет кучу пакетов https://novapackages.com/ .
    Но здесь тоже нужно учитывать, цели самой Nova и почему такая организация. Сама Nova это как бы расширяемый прототип панели управления для CRUD приложений, она универсальная by design, поэтому и нужны доп пакеты, которые закрывают конкретные цели.
    Если у вас целевое приложение, то незачем его корневую бизнес логику куда-то выводить.
    Ответ написан
    1 комментарий
  • Backend C# без JS не востребован?

    @mletov
    Если хотите чтобы работодатель принял вас таким, какой вы есть, исключительно как бэкендера, то нужно быть очень крутым бэкендером: помимо самого шарпа знать docker, kubernetes, иметь хороший опыт написания многопоточных приложений, опыт работы с утечками памяти, навык написания сложных SQL запросов и их оптимизации, опыт работы с нерелеационными БД и т д. В большинстве случаев проще вдовесок к среднему знанию шарпа освоить на среднем уровне условный Angular и идти в фулстеки, чем продемонстрировать на собесе хороший сеньерский уровень как бэкендеру.
    Ответ написан
    3 комментария
  • Что значит Junior/Middle+?

    Annikangl
    @Annikangl
    Backend developer (PHP)
    Я считаю себя разработчиком уровня Junior+ или же Strong Junior. В это понятие лично я вкладываю, то что в отличии от совсем новичкой я способен писать код и стараюсь писать его грамотно, с соблюдением некоторых принципов и паттернов. Также, в отличии от времен когда я был совсем зеленым, у меня пропал страх *нерешаемых задач*. Теперь я понимаю, что нет нерешаемых задач, а есть многосоставные и сложные задачи, но не нерешаемые.

    Еще в список знаний "твердого" джуна входит умение хотя бы базово знать и пользоваться сопутствующими технологиями помимо самого языка программирования, например Docker, Redis, разные протоколы и т.п. Это мое личное понимание основанное на личном опыте
    Ответ написан
    Комментировать
  • Почему symfony удаляет автоинкремент в миграциях?

    @tukreb
    Потому что SEQUENCE не для PostgreSQL, а для MySQL и его клонов.
    Для PostgreSQL нужно использовать IDENTITY

    /**
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private int $id;

    А если вам нужно установить какое то правило например начинать с 100, то вообще нужно NONE

    /**
         * @ORM\Column(type="id")
         * @ORM\GeneratedValue(strategy="NONE")
         * @ORM\SequenceGenerator(sequenceName="custom_seq", initialValue=100)
         * @ORM\Id
         */
        private int $id;
    Ответ написан
    1 комментарий
  • COPY в Postgresql?

    @galaxy
    Слейте все в один файл.
    Под *nix одной командой:
    tail -qn +2 files/*.txt > data.csv
    (если все файлы в одной папке files)

    Ну либо берете список файлов (из вывода dir / ls) и, допустим, в продвинутом текстовом редакторе дописываете к каждому названию куски команды COPY. Получится один большой скрипт
    Ответ написан
    1 комментарий