• Как обнулить счетчик авто-инкремента в postgresql?

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

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

    Melkij
    @Melkij
    PostgreSQL DBA
    Напрямую запросом, без лишнего 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 - иерархическая структура данных в бд?

    vabka
    @vabka
    Токсичный шарпист
    Раз у тебя возникают проблемы с таким тестовым заданием, то на работу тебе ещё рано.
    В целом - гугли любое непонятное слово. Если не находишь "иерархические данные в 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 комментарий
  • Путь до junior developer (java/kotlin). Сколько времени потребуется?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Расскажу про свой путь становления разработчиком и может быть это натолкнет вас на некоторые мысли и возможно, даже поможет принять решение.

    Лет 10 назад изучал html, css, php, SQL, как хобби.

    Аналогично. Правда, это было 13 лет назад. Я тогда забил на РНР. Первый сайт вообще поднял на Microsoft FrontPage, затем уже пошли различные CMS (Joomla, WP, Drupal). Окончил вуз по другой специальности. 3-4 года фрилансил как ВП разработчик, но в определенный момент надоело клепать сайты и захотелось чего-то большего. Тогда я владел рнр, js на определенном уровне, но писать на нем не было желания. Выбор пал на Java. Начал изучать самостоятельно с 2018 года (писал парсеры, приложения на JavaFX, пару приложений для андроид и т.д.). Но с учетом моей любви к вебу и к энтерпрайз, то в 2020 году прошел 6-мксячный курс по Java Core & Java Enterprise. Сам много чего изучал. Читал книги, брал курсы на udemy, изучал чужой код на гитхаб, брал мелкие, простые заказы, писал пет проекты и т.д.

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

    Разумеется, что знания важнее. А уровень ваших знаний определеляется на собеседовании.

    Путь до junior developer (java/kotlin). Сколько времени потребуется?

    В первую очередь, зависит от вас. На курсах преподаватель может впихнуть в вас весь учебник, но не факт, что вы его запомните. Но минимальное время наверное, 6 мес. Как правило, курс Java Core занимает примерно 3 месяца и Android API занимает тоже 3-4 месяца. Этого времени достаточно для того, чтобы вы устроились в качестве trainee || junior.

    Вот, полезные ссылки, которые помогут вам в достижении ваших целей:
    https://www.hackerrank.com/
    https://refactoring.guru/
    https://www.baeldung.com/
    https://www.it-academy.by/
    tutorials.jenkov.com
    https://www.tutorialspoint.com/java/index.htm
    https://vladmihalcea.com
    https://github.com/enhorse/java-interview
    гугл

    Не забываем про учебники:
    Java head first (хотя его я не очень люблю)
    Г. Шилдт - Полное руководство по Java
    Р. Лафоре - Алгоритмы и структуры данных Java
    Б. Эккель - Философия Java
    Р-Г. Урма - Современный язык Java.
    Б. Гетц - Java Concurrency на практике
    и др.
    Ответ написан
    2 комментария
  • Можно код-ревью проекта на C# с юнит тестами?

    vabka
    @vabka Куратор тега .NET
    Токсичный шарпист
    Сначала замечания по реализации:

    1. Раз уж мы делаем свой аналог List - тогда есть смысл вынести его в библиотеку, а не с Exe.
    TargetFramework стоит делать чуть более новым. Сейчас LTS - .NET 6 (но это не так уж и критично)

    2. Почему List Только для char реализован? Почему не сделать его обобщённым?

    3. Почему List не реализовывает стандартные интерфейсы? Тот же IEnumerable<T> хотябы.

    4. PrintForward - явно какой-то лишний метод. Список не должен отвечать за вывод в консоль.

    5. Публичный сеттер в Node выглядит как что-то опасное. Так можно изменить Next или Previous - лист изменится, вплоть до изменения количества элементов, но значение Count в самом листе не изменится, от чего всё поломается.

    А вот тесты наоборот выглядят вполне неплохо, но надо бы покрытие посмотреть.
    Ответ написан
    3 комментария
  • Как агрегировать записи одной таблицы в PostgreSQL?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Простой запрос с суммой и группировкой
    select 
    	box_id, max(name), max(another_name), "product", 
    	sum(coalesce(incoming::numeric, 0)) "incoming",
    	sum(coalesce(output::numeric, 0)) "output",
    	sum(coalesce(incoming::numeric, 0)) - sum(coalesce(output::numeric, 0)) "balance"
    from table1
    group by product, box_id
    order by box_id;


    PostgreSQL live
    Ответ написан
    4 комментария
  • Как реализуется внедрение 1С?

    @LollyFox
    требуется внедрить или установить её на предприятие. То есть сам процесс выгрузки конфигурации на сервер, её настройка и прочие соответствующие пункту этапы

    Ваши представления о установке/внедрении 1С катастрофически поверхностны и наивны.
    Разница между "Установкой 1С" и "Внедрением 1С" примерно такая же, как между научиться заводить машину и научиться на ней ездить.
    У франчей установкой и внедрением, как правило, занимаются разные специалисты, т.к. это совершенно разные области знаний и уровень владения. Установкой занимается специалист с навыками администрирования, а для внедрения нужно отлично знать внедряемую конфигурацию, предметную область, а также все инструменты языка 1С и механизмы платформы.
    Если база файловая, то для установки там нужно пару раз setup.exe, несколько раз кликнуть мышкой и через 10 мин. программа готова к работе.
    Если база серверная, то времени уйдёт немного больше, но опытный админ установит и всё развернет за пару-тройку часов.
    Внедрением же можно заниматься месяцами и даже годами, в зависимости от внедряемого продукта 1С и автоматизируемых задач.

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

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

    это "Внедрение" или именно "Установка" 1С.

    Технологий внедрения много, но в любом случае у человека, кто хоть чуть-чуть в теме такого вопроса возникнуть не может.
    Установка заканчивается запуском программы, внедрение же может не заканчиваться вообще и вестись параллельно с эксплуатацией.
    Ответ написан
    Комментировать
  • Как реализуется внедрение 1С?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Установка 1С это практически = Установка винды. "далее->далее->готово"
    Внедрение 1С это:
    1. Выслушивание хотелок заказчика
    2. Изучение существующих техпроцессов заказчика
    3. Предварительный подбор конфигурации
    4. Предварительный подбор технических требований и (при необходимости) оборудования для информационной системы.
    5. Обсуждение с заказчиком предполагаемого результата и затрат на его реализацию
    6. (В случае необходимости) доработки выбранной конфигурации под нужды заказчика
    7. (В случае необходимости) составление ТЗ или работы по доработке информационной системы заказчика для возможности взаимодействия с внедряемой системой
    8. Непосредственно установка
    9. Ввод первичной информации (общие данные, номенклатура, остатки и т.д.). Вот здесь варианты: можно импортировать из иных имеющихся систем, можно вбивать ручками (своих работников или заказчика), касательно Аптеки, там для начала может хватить и типовой номенклатуры.
    10. Тестирование системы
    11. Обучение персонала заказчика работе с системой
    12. Краткосрочный контроль за начальным ходом эксплуатации и исправление выявленных багов
    Данный список далеко не полный, естественно этим может, будет, заниматься не один (десяток) человек
    Ответ написан
    Комментировать
  • Как реализуется внедрение 1С?

    besogonskiy
    @besogonskiy
    работаю php laravel разработчиком.
    Если вы Битрикс 1с специалист и не знаете 1с, то термин "внедрение 1с" будет слишким широким для вас. 1с поделена на несколько ниш. Специалисты 1с как правило охватывают пару-тройку из этотого. речь идет о конфигурациях 1с. Кто то умеет торговлю внедрять, (УТ11. УТ10.3), кто то ERP2, кто то Зарплату (ЗУП), кто то всего понемножку. чтобы внедрить 1с недостаточно просто скачать инсталляшку и установить. Там надо еще помогать клиенту настраивать учет. множество настроек. Когда надо внедрить 1с, то клиент обращается к 1с франчайзи компаниям и обрисовывет свою задачу. Под его нужды продежкт менеджер или кто-нибудь еще выбирает конфигурацию 1с и назначает нужных специалистов под нее. Ну и оговариваются моменты синхронизации 1с с имеющимися сервисами или системами клиента. а всё знают только очень опытные специалисты, которые поработали в разных местах в том числе и в разных франчайзях. Они исходя из своих знаний могут вам порекомендовать что то. но внедрять лучше если будет узкоспециализированный специалист каждый вид конфигурации 1с. Таких и отправляют. Под бухгалтерию один, под зарплату другой, под производство третий.

    При этом нужно иметь ввиду, что внедрение подразумевает в себе не только настройки параметров 1с через дружественное меню, но и доработки под нужды клиента. И если программист 1с не владеет в совершенстве конкретной конфигурацией (так называются программы написанные под 1с) то он может понаписать доп функционала, а потом выяснится что там уже такое предусмотрено и можно было бы потратить один час чтобы все настроить и дописать пару строк кода. 1с это целое направление где на каждое поднаправление свой специалист.
    Ответ написан
    Комментировать
  • Список технологий необходимых для backend php developer?

    @Vitsliputsli
    Технологий слишком много, и у разных компаний может быть совсем разный стек. Кто пишет сайты - обязательно фреймворки, а где-то их не будет. Где-то будут требовать знание Vertica или Clickhouse, а много где вообще ни разу не услышите этих слов. Кто-то захочет еще и знание Go, а где-то очень желателен будет React и пофиг что это не backend.
    Но есть и общие моменты, очевидно знание git, PSR, composer, xdebug, для мидла должны быть не "навыки ООП", а отличное знание и понимание (в том числе SOLID, GRASP), оценка сложности алгоритмов, sql с пониманием работы индексов (разумеется нормализация, транзакционность, уровни изолированности, ACID), знание того же самого PHP (начиная с того, где и когда применяем Exception заканчивая SPL, Reflection, даже если никогда к ним не обращались, нужно знать, что они есть, когда возникнет необходимость), способы защиты от уязвимостей, сложности параллелизма (та же самя "гонка"), типы данных и что они из себя представляют (начиная с банального почему деньги не храним в float и т.п.). К примеру, вы можете не использовать ORM, но должны знать какие они бывают и доказать почему собственно вы их не использовали в конкретной задаче. Тоже самое trait, clojure и т.д. И много еще чего. Вплоть до провакационых вопросов "есть ли в php перегрузка?".
    Это часть базисных вещей, на которые накладывается специфика работы со своими технологиями.
    Ответ написан
    Комментировать
  • Как убрать readonly в Postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Postgresql вам редактировать и не препятствует. Раз вы смогли сделать create table - значит база не в read only режиме. Напишите соответствующий update и выполните.

    А вот вашему GUI клиенту скорей всего не нравится отсутствие primary key.
    Ответ написан
    Комментировать
  • Какой объем знаний и навыков нужно для того чтобы стать middle Rust разработчиком?

    vabka
    @vabka
    Токсичный шарпист
    Сейчас редко нанимают чистых растаманов, тк язык молодой.
    Обычно нанимают тех, кто переходит с других, более традиционных языков.
    Так что тебе сначала надо стать мидлом/сеньором в C++/Java/C#/C а потом дотянуть знания раста, чтобы уметь на нём решать задачи, аналогичные тем, которые ты решаешь с основным языком.

    Ну и соответствующий коммерческий опыт ~5 лет.
    Учитывай ещё и специфику Rust-проектов: это что-то новое, что требует безопасности и эффективности, где нельзя/нежелательно/невозможно использовать "Традиционные" языки.
    Так что и уровень ответственности и требуемых знаний будет выше, чем на аналогичную, например Java-позицию.
    Ответ написан
    1 комментарий