Задать вопрос
  • Как правильно взаимодействовать с БД при многопоточности?

    LaRN
    @LaRN
    Senior Developer
    Про суть ошибки написано тут https://habrahabr.ru/post/21326/ или тут www.mysql.ru/docs/man/Commands_out_of_sync.html

    Не ясно как реализован ваш класс доступа к БД. Но если все воркеры идут через один общий коннект, то тогда по ссылкам указано что происходит. По хорошему каждый воркер должен открывать свой коннект к БД.
    Ответ написан
    2 комментария
  • На что ругается линтер нетбинса?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    пробелы поставьте вокруг звездочки
    звездочка - это отдельный селектор.
    Ответ написан
    1 комментарий
  • Angular2 как сделать server side rendering?

    @bromzh
    Drugs-driven development
    https://github.com/angular/universal-starter
    В файле src/server.ts все ответы. Суть такая:
    1) создаём express-приложение
    let app = express();
    2) настраиваем обработку .html-файлов на ангуляровский рендерер из universe
    app.engine('.html', expressEngine);
    app.set('views', __dirname);
    app.set('view engine', 'html');

    3) Создаём функцию-обработчик, которая будет рендерить ангуляр-приложение на сервере, если пользователь зайдёт по определённым ссылкам
    function ngApp(req, res) {
      let baseUrl = '/';
      let url = req.originalUrl || '/';
      res.render('index', {
        directives: [ Html ],
        ...
      }
    }

    4) В этой функции каким-то образом надо подключить корневой компонент App. В приведённой ссылке это делается так: создаётся компонент Html (src/server-only-app/html.component.ts), который содержит полностью весь код index.html (кроме тегов html). Можно было просто в функцию ngApp указать в поле directives корневой компонент.
    5) Запускаем приложуху
    app.use(express.static(root, {index: false}));
    
    // Routes with html5pushstate
    app.use('/', ngApp);
    app.use('/about', ngApp);
    app.use('/home', ngApp);
    
    // Server
    app.listen(3000, () => {
      console.log('Listen on http://localhost:3000');
    });
    Ответ написан
    3 комментария
  • Как восстановить grub в Ubuntu на btrfs?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Почитайте вот это: https://help.ubuntu.com/community/btrfs
    Конфигурация по-умолчанию предполагает создание подтома (subvolume) @ для корня.
    То есть монтировать вам нужно не просто /dev/sda1, а подтом, к примеру, так:

    sudo mount -o subvol=/@ /dev/sda1 /mnt

    Вот ещё статья по установке GRUB: https://help.ubuntu.com/community/Grub2/Installing
    Там есть пример для BTRFS:

    sudo grub-install --boot-directory=/mnt/@/boot /dev/sda

    То есть у вас получится либо так:

    sudo mount -o subvol=/@ /dev/sda1 /mnt
    sudo grub-install --boot-directory=/mnt/boot /dev/sda

    либо так:

    sudo mount /dev/sda1 /mnt
    sudo grub-install --boot-directory=/mnt/@/boot /dev/sda
    Ответ написан
    Комментировать
  • В python при присваивании одного массива другому они равны, как сделать чтобы они были не зависимыми?

    самое простое
    a = b[:]
    # или
    a = b.copy()


    но это не спасёт если список является частью самого себя:
    b = [1, 2]
    >>> b.append(b)
    >>> b
    [1, 2, [...]]
    >>> id(b)
    139920848119752
    >>> id(b[2])
    139920848119752
    >>> a = b[:]
    >>> a
    [1, 2, [1, 2, [...]]]
    >>> id(a)
    139920848120456
    >>> id(a[2])
    139920848119752


    а вот deepcopy уже справится с этим
    from copy import deepcopy
    >>> a = deepcopy(b)
    >>> a
    [1, 2, [...]]
    >>> id(a)
    139920847744840
    >>> id(a[2])
    139920847744840
    Ответ написан
    1 комментарий
  • Что обозначает этот простой код?

    Дополню к другому ответу примером. Вот это все практически одно и то же:
    class Ancestor(object):
        def method(self):
            print("Hello from", self)
    
    class Descendant(Ancestor):
        def __init__(self):
            super(Descendant, self).method()
    
    class Descendant2(Ancestor):
        def __init__(self):
            super().method()
    
    class Descendant3(Ancestor):
        def __init__(self):
            Ancestor.method(self)
    
    d = Descendant()
    d2 = Descendant2()
    d3 = Descendant3()

    Hello from <__main__.Descendant object at 0x00F2FAD0>
    Hello from <__main__.Descendant2 object at 0x00F2FB70>
    Hello from <__main__.Descendant3 object at 0x00F2FB50>


    upd: Второй вариант (super без аргументов) работает только в 3-м Питоне.
    Ответ написан
    2 комментария
  • Что обозначает этот простой код?

    GavriKos
    @GavriKos
    Микропетпроджект - https://voidtrack.space/
    Вызывает __init__ родительского класса, который судя по всему - Frame.
    Ответ написан
    Комментировать
  • Как выполнять задачи в фоне?

    Stalker_RED
    @Stalker_RED
    Ура, вы изобрели очередь. Можно реализовать прямо так как вы описали (не забудьте только у задач сделать отметки со статусом и временем, типа "новое", "в процессе", "выполнено", чтобы одно задание не пошло на исполнение дважды, и проверку не находится ли оно слишком долго в процессе. Ну еще PID испольнителя можно писать, чтоб контролировать живой он там или отвалился уже).

    Можно взять что-то серьезное и крутое из готового. типа RabbitMQ или аналогов.

    Если это всё не очень критичное, падения этого "долгого" процесса редкие или их можно проигнорировать, то достаточно форкнуть процесс.
    Ответ написан
    4 комментария
  • Есть ли вариант восстановить файлы после того, как их стёр dd?

    Olej
    @Olej
    инженер, программист, преподаватель
    Я думаю, что нет, невозможно.
    Потому что:
    - dd действительно физически прописывает байт за байтом...
    - у вас указан /dev/sdb, т.е. не раздел, а весь диск, что куда хуже: dd начал писать с MBR-записи, так что у вас и структуры разделов нет.

    P.S. Если у вас Linux стоял не 1-м разделом (если там была какая виндовузная дрянь ;-)), или 1-м был его свап-раздел ... то разделы могут быть и не повреждённые, и, при большом желании, можно их восстановить, если восстановить границы вручную в MBR записи (если сохранился где-то старый листинг fdisk) ... но сильно хлопотно это.
    Ответ написан
    Комментировать
  • Расчёт пройденого растояния записаного в gpx. Как реализовать на Python?

    @zedxxx
    Это называется "Обратная геодезическая задача".
    Вот тут есть подробная теория и готовые скрипты на питоне для сферы: Задачи на сфере: обратная геодезическая задача. И есть ещё хорошая либа geographiclib которая решает эти задачи на эллипсоиде.
    Ответ написан
    Комментировать
  • Как изменить URL без перезагрузки страницы?

    Мм... Вы хотите чтобы фильтр отображался в url, но при этом страница не обновлялась?
    Можно сделать это так:
    .when('/search?param1&param2&.....&paramN',
    {
      templateUrl: html,
      reloadOnSearch: false
      controller: 'SearchCtrl'
    })

    Для смены location воспользоваться функцией:
    $location.serach(
      {
           param1: 1,
           param2: 2
      }
    );
    Ответ написан
    5 комментариев
  • Python способен на серверно-клиентские отношения?

    Да, возможно. Существует несколько фреймворков: Django, Flask . Самым популярным является Django. Вот документация на русском языке
    Ответ написан
    Комментировать
  • Как правильно использовать Docker для веб разработки?

    zvd
    @zvd
    Software developer interesting in DevOps
    Добрый день.
    Все, как вы их назвали, «задачи» должны быть по разным контейнерам.

    1. Что брать за базовый образ?
    Что используете то и берите. Используете в работе Debian? Берите Debian ( https://registry.hub.docker.com/_/debian/ )
    2. Чтобы создать свой базовый образ который будете в дальнейшем использовать для приложения, вот вам пример Dockerfile:
    #
    # MyBaseimage Dockerfile
    #
    
    # Pull base image.
    FROM ubuntu:14.04
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    RUN apt-get update
    RUN apt-get upgrade -y
    
    RUN apt-get install -y language-pack-en
    ENV LANGUAGE en_US.UTF-8
    ENV LANG en_US.UTF-8
    ENV LC_ALL en_US.UTF-8
    
    RUN locale-gen en_US.UTF-8
    RUN dpkg-reconfigure locales
    
    RUN echo "Etc/UTC" > /etc/timezone
    RUN dpkg-reconfigure -f noninteractive tzdata
    
    RUN apt-get install -y build-essential
    RUN apt-get install -y python python-dev python-setuptools python-pip python-virtualenv
    RUN apt-get install -y libxml2-dev wget
    RUN apt-get install -y libpcre3
    RUN apt-get install -y libpcre3-dev
    RUN apt-get install -y libssl-dev
    RUN apt-get install -y libncurses5-dev
    RUN apt-get install -y git git-core
    RUN apt-get install -y libpq-dev
    
    # install nginx
    RUN apt-get install -y software-properties-common python-software-properties
    RUN apt-get update

    Собрать image в директории где у вас лежит Dockerfile
    docker build -t your_docker_account/your_baseimage .

    3. Dockerfile для сборки вашего образа уже с приложением
    #
    # MyApp Dockerfile
    #
    
    # Pull base image.
    FROM your_docker_account/your_baseimage
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    # Set instructions on build.
    RUN virtualenv /env
    ADD ./ /code
    
    RUN cd /code; /env/bin/python setup.py install
    RUN cp /code/config/config.yml.docker_example /etc/code/config.yml
    
    # Expose ports.
    EXPOSE 8484
    WORKDIR /code
    CMD ["/env/bin/python", "app.py"]

    4. Собрать образ с приложением
    docker build -t your_docker_account/your_app_container .

    5. Запустить контейнер с БД, в качестве примера PostgreSQL
    docker run -p :5432:5432 --name my_postgresdb_container -e POSTGRESQL_DB=mydb_name -e POSTGRESQL_USER=mydb_user -e POSTGRESQL_PASS=super_secret_password -d kamui/postgresql

    для mariadb аналонично, контейнеры ищем здесь: https://registry.hub.docker.com/
    6. Запустить контейнер с вашим приложением, пример:
    docker run -d -p :5000:5000 \
      --name my_app_container \
      --link my_postgresdb_container:postgresdb \
      -e DOCKERDB_ENV_POSTGRESQL_DB=mydb_name \
      -e DOCKERDB_ENV_POSTGRESQL_USER=mydb_user \
      -e DOCKERDB_ENV_POSTGRESQL_PASS=super_secret_password \
      your_docker_account/your_app_container

    7. Подключиться к запущенному контейнеру с приложением
    docker exec -it your_app_container /bin/bash
    8. Читать stdout запущенного приложения в контейнере
    docker logs -f your_app_container

    + Чтобы автоматизировать запуск всех необходимых контейнеров берите Docker Compose ( https://docs.docker.com/compose/ )
    Пример файла конфигурации:
    your_app:
      build: .
      links:
        - postgresdb
      ports:
        - "5000:5000"
      environment:
        DOCKERDB_ENV_POSTGRESQL_DB: mydb_name
        DOCKERDB_ENV_POSTGRESQL_USER: mydb_user
        DOCKERDB_ENV_POSTGRESQL_PASS: super_secret_password
    postgresdb:
      image: kamui/postgresql
      ports:
        - "5432:5432"
      environment:
        POSTGRESQL_DB: mydb_name
        POSTGRESQL_USER: mydb_user
        POSTGRESQL_PASS: super_secret_password

    И теперь вместо пунктов 5 + 6 где мы запускали контейнеры мы можем всё стартануть одной командой
    docker-compose up

    + можно смонтировать код в контейнер и разрабатывать непосредственно в docker'контейнере.
    Надеюсь чем-то вам помог.
    Ответ написан
    3 комментария
  • Как прeодолеть зону комфорта, стать фрилансером не обанкротившись?

    @Ramallah
    Мужик, не повторяй моих ошибок )
    Фриланс это не такая шара как может показаться.
    Ответ написан
    Комментировать
  • Есть ли такой эмулятор андроида?

    1. Андроид пишется через И.
    2. Драйвер пишется для опредленной железки устройства. На эмуляторе у вас не будет этой железки.
    Ответ написан
    Комментировать
  • Так за что же все-таки отвечает директива listen.backlog и как ее понимать?

    @s1dney
    listen.backlog это параметр backlog функции TCP listen того сокета, на котором висит fpm
    параметр backlog отвечает за размер очереди одновременно _ожидающих_ подключений к сокету, то есть инициированных (SYN - SYN,ACK - ACK), но еще не принятых сервером (established)
    -1 использует текущий hard limit net.core.somaxconn, можно открыть исходники и убедиться в этом самостоятельно. Значение по умолчанию в линуксах равно 128 и этого более, чем достаточно для любого php-fpm.
    Ответ написан
    Комментировать
  • Как демонизировать python-скрипт?

    Disassociative
    @Disassociative
    Используй supervisord, переписывать ничего не надо
    Ответ написан
    Комментировать
  • На повестку дня: Ruby On Rails или Node.js или php или Python?

    webus
    @webus
    Golang | Python | NodeJS | Java
    Python / Django.

    Мода на Ruby / Rails прошла. Владельцу проекта нужна предсказуемость и прозрачность работы фреймворка, на котором построен его проект. Этого достаточно сложно добиться с "магией" Ruby, которую понять то сложно, если пришел с других языков. Это первое.

    Второе, как ни крути но Ruby медленный. Да я пробовал последний Ruby 2.1 с последними Рельсами, и говорю он медленный. Да я знаю, что можно запускать Рельсу на всяких passanger, thin и unicorn. Знаю что есть JRuby и прочие реализации. Знаю что можно закешировать все что можно. Я это пробовал. И все равно, Руби - медленный. К слову реализаций Python тоже много, есть и Jython, PyPy, Stackless Python. Django на фоне Rails выглядит просто молнией, быстрый старт и прозрачность работы. Нет никакой магии, все понятно как работает от начала и до конца.

    Третье, Django достаточно консервативный фреймворк. В него никогда не добавят какую-нибудь сомнительную фичу, как это бывает в Rails (например никому не нужный turbolinks). Скоро выходит версия 1.7. Где достаточно много плюшек действительно нужных.

    Вам будут говорить про разветвление Python на версию 2 и 3. Что все плохо. Не верьте. Это все ерунда. В настоящее время большинство популярных библиотек уже давно на Python 3. Django, Flask уже давно. Мы все новые проекты начинаем на Python 3 и проблем никаких нет.

    На счет NodeJS. Использовать можно, но... Неудобно. Переносимость кода client side < - > server side по факту равна менее 10%. Сейчас большинство используют NodeJS как платформу для запуска нужных тулз для сборки фронтэнда, например Grunt / Gulp, Bower и прочее. Конечно пакетный менеджер npm.

    Надеюсь ответил на ваш вопрос.
    Ответ написан
    3 комментария