Задать вопрос
  • Как на linux узнать источник процесса?

    @larrabee
    Посмотреть где лежит исполняемый файл процесса:
    ll /proc/{PID}/exe
    Посмотреть кто его родитель:
    ps -o ppid= -p {PID}
    Ответ написан
    1 комментарий
  • Как на linux узнать источник процесса?

    morihaos
    @morihaos
    На 99% вопросов уже есть ответы в инетке...
    Привет,
    1. Сначала вывод процессовс разными вариантами по ключами, как кому надо. К примеру:
    ps -aux
    Читай:
    man ps
    2. Для того чтобы узнать где именно располагается файл, можно использовать:
    pwdx PID
    где PID это номер процесса.
    Можно и через lsof узнать:
    lsof -p PID | grep cwd
    где PID это тот же номер процесса.
    Ответ написан
    1 комментарий
  • Таймер обратного отсчета с поддержкой русского языка?

    Xserber
    @Xserber
    Full-stack developer. React.js, AngularJS + NodeJS
    Вот туториал на создание таймера на jQuery https://tutorialzine.com/2011/12/countdown-jquery
    Могу скинуть с русскими комментариями по коду при необходимости.
    Функция для склонения.
    function declOfNum(number, titles) {
          cases = [2, 0, 1, 1, 1, 2];
          return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];
        }

    Использование плагина со склонением
    const note = $('#note');
    $('#countdown').countdown({
          timestamp: new Date(2017, 8, 15, 15, 20),
          callback: function(days, hours, minutes, seconds){
    
            let message = "";
            let daysText, hoursText, minutesText, secondsText = "";
    
            daysText = declOfNum(days, ['день', 'дня', 'дней']);
            hoursText = declOfNum(hours, ['час', 'часа', 'часов']);
            minutesText = declOfNum(minutes, ['минута', 'минуты', 'минут']);
            secondsText = declOfNum(seconds, ['секунда', 'секунды', 'секунд']);
    
            message += '<span class="timer__pointer">' + daysText +"</span>";
            message += '<span class="timer__pointer">' + hoursText + "</span>";
            message += '<span class="timer__pointer">' + minutesText + "</span>";
            message += '<span class="timer__pointer timer__pointer--orange">' + secondsText + "</span>";
    
            note.html(message);
          }
        });
    Ответ написан
    4 комментария
  • Whatsapp бот для уведомлений?

    @bkosun
    Вам нужен WhatsApp Business API
    Ответ написан
    Комментировать
  • CMS, фреймворк или чистый PHP?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    С точки зрения снижения трудозатрат - взять CMS типа Wordpress с плагином Custom Pages и вокруг этого весь сайт навернуть. Будет быстрее, вероятно, надёжнее (потому, что у вас опыта ещё мало, а там более-менее отлаженное решение), но практически без пользы для вас.
    С точки зрения пользы - стоит взять какой-нибудь серьёзный фреймворк (Symfony2, Yii2, Laravel) и сделать на нём. Полезного опыта будет много - по сути, практически вся разработка, если раньше не использовались фреймворки. Это будет тяжело, дольше, но гораздо полезнее. Причём, полезнее только для вас, так как по неопытности вы допустите кучу мелких ошибок и кафедра получит сайт с некоторыми проблемами.
    Чистый PHP выбирать не предлагаю - вы ничего хорошего так не сделаете без опыта, это будет пустой тратой времени и с нулевой пользой для всех.
    Поэтому вам решать, в чью пользу будете работать над проектом: в свою или кафедры. В универе я бы работал для себя.
    Ответ написан
    Комментировать
  • Как удалить класс при клике по опции со всех родителей других опции и добавить класс $(this)?

    Stalker_RED
    @Stalker_RED
    Выбрать родительскую группу, снять выделение со всех.
    Выбрать обертку кликнутого, добавить выделение.


    Второй вариант:
    Выбрать ближайшую обертку, добавить выделение, а с соседних оберток (siblings) - снять
    Но сработает не с любой разметкой.
    Ответ написан
    1 комментарий
  • Как в js/jquery сравнить строки "дата время" на больше - меньше?

    dluhhbiu
    @dluhhbiu
    var date1 = new Date();
    var date2 = new Date('30.10.2015 19:53');


    И сравниваете
    date1 > date2
    Ответ написан
    1 комментарий
  • Как сделать скриншот страницы полностью?

    rdifb0
    @rdifb0
    Программист, реалист
    В Firefox Shift-F2 и вводим screenshot file.png --fullpage
    Ответ написан
    11 комментариев
  • Как сейчас актуально делать свой почтовый сервер, чтобы доходило до gmail/yandex/mail?

    @CHolfield
    Чтобы доходили письма, нужно:
    1. Настроить DNS. MX- запись, А-запись хоста, в обратной зоне соответствующая PTR-запись.
    2. Купить сертификат для SMTP и прикрутить его к серваку. Имя субъекта в серте должно совпадать с именем хоста DNS.
    3. Пройтись по публичным блек-листам и удалить свой айпишник оттуда, если он там был.
    Ответ написан
  • Как установить composer и как им пользоваться под windows?

    K-2
    @K-2 Автор вопроса
    Постараюсь подвести первые итоги.

    Composer можно пользоваться в 2х вариантах.
    Глобально(установив программу) и Локально(ничего не устонавливая)
    И тот и тот способы работают только из командной строки. (Пуск->Стандартные->Командная строка)
    Для того чтобы что-то скопировать в командную строку ctrl+v не работает! Пользуемся правой кнопкой мышки->вставить

    ЛОКАЛЬНО пошагово
    1. Создаем папку, в которой будет проект на компьютере.
    2. В Командной строке пишем команду cd и путь к папке с проектом:
    cd C:\xampp\htdocs\test_composer
    3. Т.к. программа не установлена, нужен загрузочный файл(мини-программа composer), для его загрузки в Командной строке пишем команду:
    php -r "readfile('https://getcomposer.org/installer');" | php
    теперь в директории появился загрузочный файл
    4. Запускаем команду загрузки фреймворка(у каждого свой), в Командной строке пишем:
    php composer.phar require silex/silex ~1.1 (для фреймворка silex)

    В Командной строке, команды запускаются по разному при локальной и глобальной загрузках:
    Локально: php composer.phar require silex/silex ~1.1
    Глобально: composer require silex/silex ~1.1
    php composer.phar меняется на composer
    Еще при локальной загрузке нужно каждый раз закачивать установочный файл(это не сложно и описано в шаге 3):php -r "readfile('https://getcomposer.org/installer');" | php
    При глобальной загрузке этот файл не нужен.

    ГЛОБАЛЬНО пошагово
    1. Скачиваем программу composer https://getcomposer.org/Composer-Setup.exe
    2. Запускаем. При запросе файла php указываем путь к локальному хостингу -> папку php
    3. Теперь делаем все тоже самое что и при локальной загрузке, но пропускаем шаг 3, и изменяем запросы из Командной строки(вместо php composer.phar пишем composer). Пример:
    было так: php composer.phar require silex/silex ~1.1
    стало так: composer require silex/silex ~1.1

    О других отличиях между глобальной и локальной загрузками пока-что тут ничего не ответили!
    Ответ написан
    1 комментарий
  • На базе чего можно грамотно организовать совместную разработку для маленькой команды?

    AutomationD
    @AutomationD
    Если позволите, как показывает моя практика - на этом этапе вам главное не подменить понятия и не наделить инструменты свойствами им не свойственными. Почитайте, очень полезно - создавалось годами и я полностью с этим согласен.
    (Я работаю в штатах, в команде разработчиков в 20 человек. Agile очень эффективен)

    Лично мне нравится такой вариант:
    -Создавайте закрытый проект на github.
    -В pivotal tracker/trello создавайте спринты и дайте разрабам самим планировать время (под вашим чутким контролем, конечно)
    -Делайте утренний скрам по Skype/Google Hangout (последнее мне нравится больше - вижу всех сразу), а также другие Agile созвоны (ретроспективы, планирование спринтов)
    -В чем будут писать люди (IDE) - это их дело, главное чтобы они умели пользоваться github, а точнее ветками, форками и пул реквестами. Github for Windows/Mac вполне сносная софтина, и красивая к тому же (чего нет у bitbucket).

    Вообще, если честно, подойдет и google spreadsheet + github :)

    По поводу того, как оценивать время - очень рекомендую почасовую оплату. Они вам высылают инвойсы с указанием конкретных коммитов и часов. Все сразу будет ясно - и какого качества разработчики и как они хотят работать.

    Желаю удачи!
    Ответ написан
    1 комментарий
  • Разработка сайта с использованием git. Как работать правильно?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Чтобы решить проблемы, которые у вас существуют, нужно сделать 3 вещи, но планомерно и плавно.
    1. Обучите программистов такой вещи, как git. Подождите с недельку. Затем просто прогоните их по циклу - откати эти изменения. Верните изменения. Ну раз 5, с дедлайном вчера. Все, кто не будет пользоваться git, будут мучаться часами и днями. Напомните им, как легко это делается с помощью git. Повторите испытание через некоторое время. Поставьте ультиматум: git или идите искать новую работу. Кстати, у каждого человека должен быть свой отдельный аккаунт.
    2. Держите репозитарий для проекта целиком. Сделайте отдельные папки для исходников верстки, для собранной верстки и самого сайта. Верстальщики работают со своими папками. Собирают верстку и коммятят собранную верстку в отдельную папку. Программисты через историю коммитов смогут отследить изменения и внести их назад в разработанные компоненты.
    3. Реализуйте автоматизированное развертывание проекта и запретите редактирование файлов через FTP/минуя git.

    Ну а в целом ваша проблема - низкая квалификация кадров. Решается просмотром ютуба и обучением разработчиков. Если кто-то не хочет учиться, немного снижается ставка, а деньги отдаются тем, кто учится. Даже 500 рублей будут отличным мотиватором.
    Ответ написан
    9 комментариев
  • Объясните плиз, что тут eval(base64_decode())?

    @d-stream
    Готовые решения - не подаю, но...
    Если вкратце - то "удаление всего". На мой взгляд стоит побить разработчика, желательно ногами.
    Ответ написан
    2 комментария
  • Для чего нужны Генераторы (yield) в php?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    php.net/manual/ru/language.generators.syntax.php
    yield - возврат из функции с сохранением текущего итерационного состояния этой функции.
    При запросе следующего значения в цикле итерационном цикле - снова вызов этой функции с использованием сохранённого состояния, т.е. продолжение обработки данных с места возврата внутри этой функции.

    Можно провести некую аналогию с "курсором" и местом обработки данных в позиции курсора.
    Ответ написан
    3 комментария
  • Как вывести"Вы экономите" в Opencart2?

    dim565
    @dim565
    Здравствуйте! Работает при установке для товара цены акции (не скидки), думаю это более логично.
    На странице товара
    /catalog/controller/product/product.php
    Найти:
    $data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
    Добавить после:
    $data['discount_amount'] = $this->currency->format($this->tax->calculate(($product_info['price'] - $product_info['special']), $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);

    /catalog/view/theme/default/template/product/product.tpl
    Найти:
    <li>
    <h2><?php echo $special; ?></h2>
    </li>
    Добавить после:
    <li class="discount_amount">
    <?php echo 'Вы экономите '.$discount_amount; ?>
    </li>

    На странице категории
    /catalog/controller/product/category.php
    Найти:
    $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
    Добавить после:
    $discount_amount = $this->currency->format($this->tax->calculate(($result['price'] - $result['special']), $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
    Найти:
    'price'       => $price,
    'special'     => $special,
    Добавить после:
    'discount_amount' => $discount_amount,

    /catalog/view/theme/default/template/product/category.tpl
    Найти:
    <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span>
    Добавить после:
    <span class="discount_amount"><?php echo 'Вы экономите '.$product['discount_amount']; ?></span>

    Проверено на чистом OpenCart 2.3.0.2. По-хорошему, надо бы создать модификатор ocmod в формате xml, а не редактировать код напрямую, но это уже другой уровень.
    Ответ написан
    1 комментарий
  • Какой хороший курс по JS (для среднего уровня)?

    tundramani
    @tundramani
    learn.javascript.ru
    +
    фленагана справочник
    +
    годы тяжелой практики
    Ответ написан
    2 комментария
  • Какой хороший курс по JS (для среднего уровня)?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    https://www.youtube.com/watch?v=bzuelEN1Kg8&list=P... вот это дело мозг хорошо поставило на место по части ES5, Еще зоракса послушай. learn.javascript.ru хорош, но нудноват...
    Ответ написан
    2 комментария
  • Как настроить постоянные ссылки в Wordpress на nginx?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У вас не конфиг, а какой-то винегрет...
    return 301 https://$server_name$request_uri;
    В рамках listen :80 вы редиректите на https?!
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    Этот фрагмент у вас вложен в такой же
    location / {
        ...
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
        ...
    }

    Что это за чушь? В этом конфиге даже разбираться не хочется.

    Вот базовый конфиг, который работает и отвечает за пермалинки в том числе:
    server {
            # Слушаем 80й порт
            listen 80; 
            # Обслуживаем доменное имя, www тут же слушать не надо - будут дубликаты контента, печаль для SEO
            server_name example.com;
            # Корневая директория проекта
            root /var/www/example.com/httpdocs;
    
            # Индексы
            index index.php index.html;
    
            # Обработка запросов
            # $uri - существует ли конкретный файл
            # $uri/ - существует ли директория
            # /index.php?$args - если это не запрос на существующий файл или директорию, то перебрасываем на роутер WordPress (это и есть то, что надо для пермалинков)
            location / {
                    try_files $uri $uri/ /index.php?$args;
            }
    
            # Обрабатываем PHP
            location ~ \.php$ {
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                    fastcgi_pass unix:/var/run/php5-fpm.sock; # или php7.0-fpm.sock
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
            }
    
            # Все остальное
    
            # Запрещаем доступ к .htaccess
            location ~ /\.ht {
                    deny all;
            }
    
            # Просим кешировать статику на Х дней, не писать в логи
            location ~*
            ^.+\.(js|css|swf|xml|txt|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                    access_log off;
                    log_not_found off;
                    expires 30d;
            }
    
    }
    
    # Отдельно слушаем домен с www и редиректим на основной
    server {
            # Слушаем 80й порт
            listen 80; 
            # Обслуживаем доменное имя c www
            server_name www.example.com;
            # Отправляем запрос на основной домен
            return 301 $scheme://example.com$request_uri;
    }

    Снабдил комментами для ясности.

    Что касается протокола HTTPS, то во-первых, его слушать надо на отдельном порту, а во-вторых, там еще SSL-сертификат надо подключать.
    Ответ написан
    2 комментария
  • Оптимизация сайта на Wordpress + Woocommerce?

    secsite
    @secsite
    Безопасные и быстрые сайты
    Кто что посоветует?

    Разбираться с причинами, а не бежать ставить костыли в виде кеш-плагинов.

    wordpress.tv/2013/08/19/konstantin-kovshenin-wordp...
    wordpress.tv/2015/08/20/konstantin-kovshenin-wordp...
    Ответ написан
    Комментировать
  • Как вывести только товары с акцией в WooCommerce?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    так wp-panda.com/woocommerce_posts/woocommerce-shortco...

    цикл сильно прощще

    <ul class="products">
    	<?php
                    $product_ids_on_sale = wc_get_product_ids_on_sale();
    
    		$args = array(
    			'post_type' => 'product',
                            'post__in' => array_merge( array( 0 ), $product_ids_on_sale )
    			);
    		$loop = new WP_Query( $args );
    		if ( $loop->have_posts() ) {
    			while ( $loop->have_posts() ) : $loop->the_post();
    				wc_get_template_part( 'content', 'product' );
    			endwhile;
    		} else {
    			echo __( 'Продуктов не найдено' );
    		}
    		wp_reset_postdata();
    	?>
    </ul><!--/.products-->
    Ответ написан
    1 комментарий