• Почему может не работать apt-get на Ubuntu?

    Olej
    @Olej
    инженер, программист, преподаватель
    Куда копать, товарищи?

    У вас нет актуальных списков репозитариев, /etc/apt/sources.list
    Лучше всего содержимое генерировать отсюда: Ubuntu Sources List Generator
    Ответ написан
  • На какой CMS сделать интернет магазин?

    gorczko
    @gorczko
    Еще из бесплатных заслуживает внимания DotPlant2. Она на фреймворке Yii2 и на ней уже практически все функции для интернет-магазина реализованы. И под любой шаблон можно ее заточить
    Ответ написан
  • Wordpress - все страницы кроме главной отображаются по шаблону 404.php. Как исправить?

    @cotang Автор вопроса
    Изначально в настройках постоянных ссылок стояло "простые" .../?p=123, потом я поменял на "название записи" .../sample-post/, и возникла ошибка 404. Сейчас попробовал вернуть на "простые", и все прекрасно отображается как раньше. А для страниц ему не нравится любой вариант, отличный от .../?page_id=34.
    Но мне все же хотелось бы для большей наглядности сделать отображение название страницы/поста.
    Index.php присутствует.
    Простое пересохранение ссылок не помогает.
    Ответ написан
  • По какому принципу работает CSRF Token защита и чем она отличается от Api Token?

    tkutru
    @tkutru
    A programming cat.
    Во-первых, наверное все-таки CSRF Token.
    Во-вторых, CSRF токен никуда руками вводить не надо, его обычно прицепляют в качестве доп. скрытого поля при отправке форм. Смысл в том, чтобы злоумышленник не мог дать ссыль или сделать на своем сайте форму, переход по которой заставил бы залогиненного на атакуемом ресурсе пользователя сделать какие-то неявные действия (сменить пароль, емаил, написать сообщения, перевести средства и т.п.).
    Ответ написан
  • Как создать верный docker файл для проекта?

    miraage
    @miraage
    Примерно так выглядит мой конфиг для local development with symfony.
    Это не продакшн конфиг.

    docker-compose.yml
    version: '2'
    services:
      nginx:
        build: ./docker/nginx
        ports:
          - "80:80"
        links:
          - php
        volumes:
          - ./docker/nginx/http.conf:/etc/nginx/conf.d/http.conf
          - ./docker/nginx/site.conf:/etc/nginx/sites-enabled/site.conf
        volumes_from:
          - php
        command: 'nginx -g "daemon off;"'
      php:
        build: ./docker/php
        volumes:
          - .:/src
          - ./docker/php/php-cli.ini:/etc/php/7.0/cli/conf.d/php-cli.ini
          - ./docker/php/php-fpm.ini:/etc/php/7.0/fpm/conf.d/php-fpm.ini
          - ./docker/php/pool.conf:/etc/php/7.0/fpm/pool.d/www.conf
        command: 'php-fpm7.0 -F'
        links:
          - db
          - cache
        environment:
          SYMFONY__DB__DRIVER: pdo_pgsql
          SYMFONY__DB__HOST: db
          SYMFONY__DB__PORT: 5432
          SYMFONY__DB__NAME: dbname
          SYMFONY__DB__USER: dbuser
          SYMFONY__DB__PASSWORD: dbpassword
      db:
        image: "postgres:latest"
        environment:
          POSTGRES_DB: dbname
          POSTGRES_USER: dbuser
          POSTGRES_PASSWORD: dbpassword
      cache:
        image: "redis:latest"
        command: redis-server --appendonly yes


    docker/nginx/Dockerfile
    FROM ubuntu:16.04
    
    RUN apt-get update \
        && apt-get install -y nginx


    docker/nginx/http.conf
    access_log /dev/stdout;
    error_log /dev/stderr;


    docker/nginx/site.conf
    server {
        listen 80;
        server_name example.dev;
        root /src/web;
        index index.php index.html;
        
        location / {
            try_files $uri /app_dev.php$is_args$args;
        }
        
        location ~ ^/(app_dev|config)\.php(/|$) {
            include fastcgi.conf;
            
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_pass php:9000;
            
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
        }
        
        location ~ \.php$ {
            return 404;
        }
    }


    docker/php/Dockerfile
    FROM ubuntu:16.04
    
    ENV PHP_PACKAGES \
            php7.0-fpm \
            php7.0-cli \
            php7.0-readline \
            php7.0-pgsql \
            php7.0-mcrypt \
            php7.0-xml
    
    RUN apt-get update \
        && apt-get install -y $PHP_PACKAGES
         
    RUN usermod -u 1000 www-data


    docker/php/php-cli.ini
    error_reporting = -1
    display_errors = On
    log_errors = Off
    html_errors = Off


    docker/php/php-fpm.ini
    error_reporting = -1
    display_errors = On
    log_errors = Off
    html_errors = On
    cgi.fix_pathinfo = 0


    docker/php/pool.conf
    pid = /var/run/php.pid
    
    [www]
    
    user = www-data
    group = www-data
    
    listen = 0.0.0.0:9000
    
    pm = dynamic
    pm.max_children = 20
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
    clear_env = no
    catch_workers_output = yes


    Как разворачивать базу

    Читайте про docker-entrypoint-initdb.d

    Либо же
    docker cp file.sql.gz containername:/tmp/dump.sql.gz
    docker exec -ti containername bash
    gunzip -c /tmp/dump.sql.gz | psql -U username dbname
    Ответ написан
  • Как добавить в Yii2 - authClient returnUrl поддержку мультиязычности?

    arutyunov
    @arutyunov
    Mooza.ru — Делаем сайты
    Я "переводил" все url с помощью этого расширения: https://github.com/codemix/yii2-localeurls

    Любой запрос проходит через urlManager, который переопределен в данном расширении. Автоматически определяется язык для пользователя и выполняется редирект на эту языковую версию. Также можно добавить в "игнор" те шаблоны url, которые не надо обрабатывать и редиректить. Например, /api и пр.
    Ответ написан
  • Заказчик требует - что делать?

    orlov0562
    @orlov0562
    I'm cool!
    Если "голодные", то лучший вариант обсудить все правки, которые он "думал" и закончить проект, прямо сказав, что все что не записано, то не имеет силы и вы идете ему на встречу.

    Если "не голодные", стоять на своем и заключать дополнение к договору за отдельные правки, при этом что-то можно сделать авансом. А в случае несогласия, посылать на юг, т.к. вы тоже думали, что все что не в договоре, надо делать отдельно за дополнительную плату.

    Я бы постарался все же найти компромисс, попытавшись объяснить клиенту что есть ТЗ, а есть его мысли которые ты не умеешь читать.

    Ну, и помни, есть клиенты мозго@бы (troublemaker) которых легче послать и потратить время не на них, а на нормальных людей.

    Удачи!
    Ответ написан
  • Заменит ли Yarn Bower и Npm?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    bower - довольно странное явление, так как npm модули можно напрямую бандлить.

    А yarn сам по себе npm-модуль.
    Ну а webpack - это вообще другое.
    Ответ написан
  • Почему Yii2 не использует defaultSchema в PostgreSQL?

    Samouvazhektra
    @Samouvazhektra
    Отчаянная домохозяйка
    в конфиге
    'db'=>[
             'class' => 'yii\db\Connection',
             .....
            'schemaMap' => [
                    'pgsql' => [
                    'class' => 'yii\db\pgsql\Schema',
                    'defaultSchema' => 'myschema', //specify your schema here
                    ]
            ],
             'on afterOpen' => function ($event) {
                    $event->sender->createCommand("SET search_path TO myschema")->execute();
             }
    ]
    Ответ написан
  • Почему Yii2 не использует defaultSchema в PostgreSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    Схемы базы были сделаны не для того.
    Сделайте для dev именно отдельного пользователя и отдельную базу данных.
    Ответ написан
  • Fotorama: как решить проблему с получением API объекта?

    Вопрос был задан давно, но я, всё же, отвечу. Только что возникла такая же проблема, нагуглил этот топик, и его копию на stackoverflow :) и там и там нет ответов, может быть кому-то поможет. Решил проблему так:
    var images = [];
    var fr = $('.fotorama').fotorama();
    var fotorama = fr.data('fotorama');
    for (var i in resp.product.images) {
    	if (resp.product.images[i])
    		images.push({img: resp.product.images[i]});
    }
    
    if (fotorama) {
    	fotorama.load(images);
    } else {
    	$('.fotorama').fotorama({data: images});
    }


    Возможно дело в том, что объект не инициализирован, а вызвав fotorama с data - мы его инициализируем корректно.
    Ответ написан
  • Зачем нужен twig если в него даже widget нельзя вставить?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Twig - отличный инструмент. Но в Yii2 он в общем то и не нужен. Он там будет больше мешать. Суть в том, что в Yii2 шаблоны сильно интегрированы в фреймворк: лайауты, виджеты, регистрация метатегов, ассеты, кэширование и прочее. Все что вам понадобится при работе с шаблонами там уже есть.

    В свое время, перед началом работы над крупным проектом, у нас тоже стоял вопрос шаблонизатора. Тоже рассматривали Twig. Но после тщательного изучения фреймворка подключение внешнего шаблонизатора сразу отбросили. И за последний год ни разу не жалели о таком решении.

    Есть правда одно место, где без внешнего шаблонизатора не обойтись. Но это уже другая история :)
    Ответ написан
  • Какие преимущества фриланс имеет над работой в офисе?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Описываю по себе:
    1) Возможность создать свой собственный режим сна. Для меня вставать в 8-9 утра это настоящая боль. Уже год+ засыпаю между 3-4 часами ночи и просыпаюсь между 11-12. То есть абсолютно всегда сплю свою норму в 8 часов, для того чтобы чувствовать себя нормально и не пить никаких кофе.
    2) Отсутствие временных/моральных/физических затрат на дорогу до работы. Конкретно мне жаловаться не приходилось, ибо первое место работы было в 10 минутах ходьбы от дома, но вот люди в больших городах от этого явно страдают.
    3) Возможность жить и работать так, как это удобно ТЕБЕ. Вот сижу я днем, дописал только-что какой-то кусок проекта и смотрю в окно, а там солнышко светит и птички поют. Ну я беру и иду бегать на стадионе. И это все происходит в 2 часа дня. А что в офисе? Ходить проветривать мозги на улицу на официальных перерывах? А если заработался и пропустил перерыв, то что? Во многих компаниях придется сидеть дальше тупить.
    4) Возможность работать тогда, когда это наиболее удобно и эффективно для тебя. Один из самых важных пунктов. В офисе пришел и сидишь 8-часовой рабочий день. И ты же не можешь подойти к начальнику и сказать, что у тебя сейчас мозги не работают, и тебе бы хотелось свалить домой вообще. Ну может 1-2 раза отпустят, а что делать если тебя в каждый второй день после обеда парализует на пару часов? Будешь в итоге сидеть и накручивать спагетти-код на вилку. А потом его рефакторить, матерясь. Мне вот например ночью нравится работать, но где вы видели офисы, в которых вам позволят одну половину дня работать там, а другую ночью дома?
    5) Отсутствие привязанности к каким-то предпочтениям фирмы. Вот попали вы в веб-студию, делающую сайты на битриксе. И представим чисто теоретически что вам там платят нормальные деньги. А дальше что? Ну полгода вы попилите магазинчики. А потом еще полгода. И еще. Ну конечно не везде так уныло, но своих "особенностей" хватает во всех компаниях.
    6) Отсутствие видимого потолка по заработку. В стандартной компании вас посадят на оклад, +небольшие премиальные если вся команда в сроки будет сдавать проект например и нарисуют вам роадмап, по которому вы будете строить планы на жизнь. Аля "через полгода сдам 7 проектов и меня повысят, увеличив зп на 15%". А потом в один прекрасный вечер после работы вы сядите изучать что-то интересное дома. И будете изучать недели-месяцы. И вот приходите вы однажды на работу, с кучей новых знаний, а у вас в голове стойкое ощущение того, что сейчас вы достойны не то что этой прибавки в +15%, а вы на все 30% тяните. Но вам никто этого не даст. Просто потому-что обычные офисы живут по другим правилам.
    Ответ написан
  • Почем php-fpm не работает ни через сокеты, ни через tcp?

    totalcount
    @totalcount
    Ну как же, Иван :)
    Писал давно статью о настройке NGINX + PHP-FPM.
    1/ Почему nginx работает НЕ от www-data?
    2/ Конфиг php-fpm
    [test]
    listen = /var/run/test.sock
    listen.mode = 0666
    user = test
    group = test
    chdir = /var/www/test
    php_admin_value[upload_tmp_dir] = /var/www/test/tmp
    php_admin_value[date.timezone] = Europe/Moscow
    pm = dynamic
    pm.max_children = 10
    pm.start_servers = 2
    pm.min_spare_servers = 2
    pm.max_spare_servers = 4

    3/ Конфиг nginx
    upstream backend-test {server unix:/var/run/test.sock;}
    server {
    	listen 80;
    	server_name test.ru;
    	root /var/www/test;
    	access_log /var/log/nginx/test-access.log;
    	error_log /var/log/nginx/test-error.log;
    	index index.php;
    	rewrite_log on;
    	location / {
    		try_files $uri $uri/ @rewrite;
    	}
    	location @rewrite {
    		rewrite ^/(.*)$ /index.php?q=$1;
    	}
    	location ~ \.php$ {
    		include fastcgi_params;
    		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    		fastcgi_pass backend-test;
    	}
    	location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|bmp)$ {
    		access_log off;
    		expires 10d;
    		break;
    	}
    	location ~ /\.ht {
    		deny all;
    	}
    }

    Ответ написан
  • Величина «rem» вместо пикселей — что это такое?

    @asd111
    Ваш пример по идее должен выглядеть примерно так:
    html {
    font-size: 1px;
    }
    
    .element{
    margin: 0px 20px 0px 20px;
    margin: 0 20rem 0 20rem;
    }

    таким образом мы сможем все перевести в rem без сложных расчетов
    Ответ написан
  • Разница в датах?

    @Amon_Sha
    Именно так, «ГОДА — ЧАСЫ — МИНУТЫ — СЕКУНДЫ»? Дни, месяцы не нужны?

    Я бы делал так:

    1) получаем разницу дат в секундах
    2) делим на 60: результат — разница в минутах, остаток — секунды
    3) делим на 60: результат — разница в часах, остаток — минуты
    4) делим на 24: результат — разница в днях, остаток — часы
    5)… тут нужно правильно посчитать годы (с учётом високосных и кратных 100 и 400), получим разницу в годах, в остатке — дни
    6) RPOFIT

    Если ещё и месяцы нужны, то будет заметно сложнее.
    Ответ написан