• Как сделать собственную сборку Linux дистрибутива для ARM процессора (Rockchip 3399)?

    @rPman
    debian или ubuntu (точнее те что на основе пакетного менеджера .deb) имеют штатный инструмент - debootstrap, он позволяет собрать минимальную сборку порядка 200мб, в которую вы можете доустановить необходимые пакеты. Причем ничто не мешает все манипуляции проводить с ноутбука (т.е. отличная архитектура).

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

    Я не знаю никакой другой системы пакетов (т.е. инструмент, позволяющий обслуживать программные пакеты и их зависимости), которая позволила бы создать сборку на столько эффективной и компактной по использованию ресурсов. Я собирал инсталляцию для eeepc с xserver и awesome de, с затратами оперативной памяти в 50мб (после запуска сразу доступен запуск браузера или просмотр видео mvp), когда как минимальная сборка на базе ubuntu занимала 200 или 300мб (и оставшихся не хватало для комфортной работы браузера).
    Ответ написан
    8 комментариев
  • Как установить свой обработчик сигналов SIGUSR1 и SIGUSR2?

    man signal

    #include <signal.h>
    void sigprocess (int sign){
     /* process signal here */
    }
    
    ...
    int main(){
    ...
     signal (SIGUSR1, sigprocess);
    ...
    }


    P.S. если обработчик не нужен, можно
    signal(SIGUSR1, SIG_IGN);
    Ответ написан
    Комментировать
  • Есть ли способ спросить у PostgreSQL, с какими запросами у него возникают наибольшие сложности?

    Melkij
    @Melkij
    PostgreSQL DBA
    Поставить pg_stat_statements, спустя какое-то время посмотреть что тот собрал. Например, нашим отчётом
    Ответ написан
    1 комментарий
  • Как записать данные в DurationField в Django 2.2?

    Acaweb
    @Acaweb Автор вопроса
    Начинающий Вэб-разработчик
    Сам решил
    import datetime as datetime_class # забыл добавить в ответ
    
    duration = datetime.strptime(duration, "%H:%M:%S")
    x_duration =datetime_class.timedelta(hours=duration.hour, minutes=duration.minute, seconds=duration.second).total_seconds()	
    duration = timedelta(seconds = x_duration)
    Ответ написан
    Комментировать
  • По вашему опыту - поможет ли от выгорания смена работы?

    sim3x
    @sim3x
    Обратитесь к специалисту
    Ответ написан
    Комментировать
  • Это нормально, что у меня так много Файловых систем Ubuntu 18.04?

    @ninetailedfirefox
    Насколько я понял из знакомства с этой версией Ubuntu, каждый установленный snap пакет устанавливается на манер Докер контенейров, и имеет "свою файловую систему" и монтируется таким вот образом. На истину не претендую, просто предположение.
    Ответ написан
    Комментировать
  • Как прокидывать Ingress controller наружу?

    Приветствую.

    Ниже пример конфигурации daemon set для bare-metal k8s. Если будут вопросы - пишите.
    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: nginx-ingress-lb
      labels:
        name: nginx-ingress-lb
      namespace: kube-system
    spec:
      updateStrategy:
        type: RollingUpdate
      template:
        metadata:
          labels:
            name: nginx-ingress-lb
          annotations:
            prometheus.io/port: '10254'
            prometheus.io/scrape: 'true'
        spec:
          serviceAccountName: nginx-ingress-serviceaccount
          # This may be used to push kubernetes SVCs to the internet
          # Label a secure host as 'edge-router' + setup forwarding, SSL certs, etc.
          hostNetwork: true
          nodeSelector:
            node-role.kubernetes.io/ingress: "true"
          terminationGracePeriodSeconds: 60
          containers:
          - image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.0
            name: nginx-ingress-lb
            readinessProbe:
              httpGet:
                path: /healthz
                port: 10254
                scheme: HTTP
            livenessProbe:
              httpGet:
                path: /healthz
                port: 10254
                scheme: HTTP
              initialDelaySeconds: 10
              timeoutSeconds: 1
            ports:
            - containerPort: 80
              hostPort: 80
            - containerPort: 443
              hostPort: 443
            env:
              - name: POD_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
              - name: POD_NAMESPACE
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.namespace
            args:
            - /nginx-ingress-controller
            - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
            - --configmap=$(POD_NAMESPACE)/nginx-ingress-configmap
            - --default-ssl-certificate=$(POD_NAMESPACE)/default-ssl-cert
    Ответ написан
    5 комментариев
  • Как сделать репликацию PostgreSQL и распределение нагрузки с учётом нагрузки от записи, а не чтения?

    Melkij
    @Melkij
    PostgreSQL DBA
    Внимание вопрос: зачем?

    100 записей в секунду и 5 чтений в минуту - это ни о чём.
    Писать 10000 записей в секунду - ну и? Никакой проблемы держать на одной железке и это в обычном OLTP, а не 99% write/1% read как у вас.

    Взять адекватные диски, выкинуть к чертям докер. А для hot standby масштабировать запись не нужно. Простая и надёжная потоковая реплика.

    монго можно разделить на X нод без шаманских танцев с бубном

    Спасибо, хорошая шутка.

    На всякий случай: вы ведь поминаете что никакая репликация для масштабирования записи не может помочь? Если каждый хост должен содержать копию данных - значит он должен все данные записать. Для масштабирования записи - шардирование верное слово. Только это не про сотни транзакций записей.
    Ответ написан
    1 комментарий
  • Какая среда разработки лучше для Python?

    longclaps
    @longclaps
    Да вот сегодняшняя среда отличная.
    ps. Забудь, чувак. Ты нагенерил 144 вопроса, но корм оказался не в коня. Нет такой среды.
    Ответ написан
    Комментировать
  • Как пробросить Rutoken в Docker контейнер?

    Mikname
    @Mikname Автор вопроса
    Под Centos не пробросился под 18 убунтой всё заработало.
    Спасибо за внимание!

    docker run -it -p 8080:8080 -d --rm --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu
    Ответ написан
    Комментировать
  • Когда язык может стать узким местом?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Во-первых, язык влияет на производительность программистов, а не программ. Узким местом может стать платформа, в вашем случае виртуальная машина CPython. Но при разработке сетевого ПО в целом и web-приложений в частности главный тормоз - это ввод/вывод. Издержки на него на порядки превосходят издержки на интерпретацию, так что последняя практически не влияет на производительность. В то же время CPython хорошо справляется с вводом/выводом с помощью Asyncio и способен решать проблему c10k.

    Во-вторых, это зависит от того, что именно делают ваши микросервисы с каждым запросом. Например, для обычного интернет-магазина на очень синхронном Django 300 rps - это вполне обычная нагрузка, о которой не стоит беспокоится, если в команде разработчиков нет умственно отсталых и криворуких.
    Ответ написан
    Комментировать
  • Как сделать рандомное значение записи в модели Django?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    ref_code = models.CharField(default=lambda: get_random_string(32, chars), unique=True)

    А вообще чем uuid не угодил?
    Ответ написан
    4 комментария
  • Как правильно делать deploy с помощью docker registry?

    Tyranron
    @Tyranron
    Официальную документацию надо все же читать, проявив усидчивость. Тогда не будет путаницы в базовых понятиях, из-за которой возникает каша в голове.

    Давайте разберемся с инструментами и их предназначением, которые Вы используете:
    • Комманда docker - это консольный интерфейс (CLI) для работы с Docker
    • docker build создает по заданному Dockerfile образ контейнера
    • docker tag присваивает указанному образу указанный тег (опция -t для build делает то же самое)
    • docker pull скачивает указанный образ из удаленного регистра на текущую машину
    • docker push заливает указанный образ в удаленный регистр
    • docker run запускает новый контейнер из указанного образа
    • docker ps выводит список текущих "бегущих" контейнеров

    Команда docker не жонглирует файлами, она жонглирует образами и контейнерами, а они от нас абстрагированы Docker'ом, как что-то эфемерное. То есть выполняя комманду docker pull Вы не скачиваете образ в ту папку, где выполняете команду, и уж точно не скачиваете какие-либо файлы. Все что Вы делаете этой командой - это скачиваете образ в локальное хранилище Docker'а, дабы Docker daemon мог запустить контейнер на основании этого образа.

    Команда docker-compose - это уже совсем другая команда. Все что она делает - это читает указанный YAML-манифест и выполняет соответствующие команды Docker. Это всего лишь позволяет декларативно указывать желаемые сценарии при работе с Docker в удобном формате. Но ни команда docker, ни docker-compose, не предоставляют ничего для того, чтобы транспортировать/обновлять версии Ваших манифестов где-то там. Docker, опять таки, жонглирует образами и контейнерами, не более.

    У Вас в манифесте указана директива build:. Таким образом docker-compose пытается сначала собрать контейнер, вместо того, чтобы просто запустить его из образа.

    Касательно совета docker-compose.yml под каждый env, все правильно советовали. Именно так это и задумывалось. Вы в манифесте указываете отнюдь не разные окружения (development, production), а набор контейнеров, которые должны бежать в одной связке одной логической единицей (концепция POD'ов). Ничего не запрещает делать и так, как сделали Вы, но это сродни использованию дуршлага в роли миски для еды: сегодня Вы нормально из него наворачиваете пельмени, а завтра супчик в нем уже куда-то не туда утекает.

    Воркфлоу в Вашем случае можно организовать следующим образом:
    1. На dev-машине у Вас один docker-compose.yml, согласно которому контейнер перед запуском собирается из сорцов.
    2. Когда у Вас готова новая версия приложения, Вы его собираете через docker build, присваиваете ему номер версии через docker tag и отправляете в удаленный регистр образов через docker push.
    3. На prod-машине у Вас отдельный docker-compose.ymlв котором указано запускать конкретную версию образа (и никаких build). Новая версия приложения - меняем тег образа в манифесте и перезапускаем контейнеры. При выполнении docker-compose образ автоматически скачается перед запуском, если его нет локально. Если же Вы обновили образ конкретной версии, которая уже была скачана ранее, то да, нужно выполнить docker pull перед стартом, дабы скачать новый образ.


    Дополнительный совет:
    Сборку образа и его заливку в удаленный регистр часто удобно автоматизировать с помощь Makefile'ов.
    Ответ написан
    3 комментария
  • Что лучше использовать веб-разработчику: Linux Mint или Ubuntu?

    Adamos
    @Adamos
    Вы задаете вопрос, который ежемесячно обсасывается на Тостере вдоль и поперек.
    Значит, привычки гуглить и навыка читать нагугленное нет.
    Следовательно, Линукс противопоказан. Dixi.
    Ответ написан
    2 комментария
  • Возможно ли в Python перегрузить двоеточие?

    @asd111
    Можно конечно. Просто перепиши парсер интерпретатора cpython. И поменяй грамматику. :)
    Ответ написан
    Комментировать
  • Как восстановить пароль от keystore?

    @tema86 Автор вопроса
    Нашел инфу, пароль по дефолту android.
    Ответ написан
    Комментировать
  • Почему в django 1.9 у меня при makemigrations появляются миграции которых я не ожидаю?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Значение поля с choices формируется статически на этапе миграции. Просто в этот момент происходит интерпретация твоего list comprehension, формируется список и поле им обновляется. Тот факт, что с прошлого раза ничего не изменилось при миграции не отслеживается.
    Если не хочешь видеть каждый раз эту миграцию - задай список валют статически, руками.
    Если предполагается изменение "на лету" - сделай лучше связь со справочником валют (через ForeignKey или ManyToManyField)

    Ну или каждый раз исправляй миграцию перед применением, удаляя это поле.

    Или удаляй эту миграцию, если изменение этого поля в ней - единственная операция.
    Ответ написан
    Комментировать
  • Где добывать заказы на разработку сайтов вне фриланс-биржи?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    Да поможет вам Google :)
    Учите английский - аудитория будет шире. Оплата интересней.
    Ответ написан
    Комментировать
  • Кто какой использует time tracker ?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    Мы только что опубликовали новый - TopTracker - это полностью бесплатный (и без каких-либо лимитов) новый тул, сделанный специально для фрилансеров. Пробуйте! :)
    Ответ написан
    Комментировать
  • Как построить работу с BigData?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Все достаточно просто, перестаньте думать таблицами и начните думать ДОКУМЕНТАМИ.
    У вас есть всего два документа - два индекса. Индекс Пользователей, и индекс Операций.
    Пользователь представляет из себя документ со всеми полями таблицы member. А Операция, состоит из конкатенации полей member-operation-operationtype. Да данные в индексе Операции будут дублировать некоторые поля из Пользователей, но это и не страшно, это правильно, так как это фактически лог.
    Ответ написан
    Комментировать