• Как вы тестируете статические методы?

    He11ion
    @He11ion
    PHP-monkey
    Зависит от Вашей архитектуры, я применяю класс-"обертку" с перегрузкой нужного метода (этим же трюком пользуюсь для изменения вызова функций класса-родителя)

    Как-то так:
    class A { // "родной" класс
    	static function static_call ()
    	{
    		echo 'static_call a';
    	}
    }
    
    class B extends A{ // "обертка" для тестирования
    	static function static_call ()
    	{
    		echo 'static_call b';
    	}
    }
    Ответ написан
    5 комментариев
  • Как сделать чтоб при нажатии кнопок "Сохранить" сохранился текст по cookie?

    @CrazyFail
    можно использовать PHP Cookie php.net/manual/ru/function.setcookie.php
    или jQuery плагин jQuery.cookie plugins.jquery.com/cookie
    А при загрузке страницы, если в Cookie что-то есть, то выводить в эту форму
    Ответ написан
    1 комментарий
  • Неизвестный пиксель отслеживания на сайте, как отследить?

    grimich
    @grimich
    Не забудьте отметить лучший ответ как решение
    Вот этот кусок кода:
    <!-- SalesDoubler -->
    <script type="text/javascript">
    (function (js) {
    var scr = document.createElement('script');
    scr.setAttribute("src", js + "?ts=" + (new Date().getTime()));
    scr.setAttribute("async", true);
    document.getElementsByTagName("head")[0].appendChild(scr);
    }("//www.dmpcloud.net/spx/amurchik.ua/spx.js"));
    </script>
    <!-- SalesDoubler END -->


    Как искать:
    1. Открыть Dev Console, нажать Esc, Перейти на вкладку search, найти искомую строку ('tarkita.ru'). Увидим урл скрипта, который это вызывает.
    2. По урлу скрипта найти, откуда он сам грузится - с морды :)
    Ответ написан
    Комментировать
  • Обьясните зачем конкретно нужны Redis и Memcached и можно ли их связать с технологиями как nodejs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Кешировать можно все, что лежит на диске или в БД. Если бы Вы писали на чем-то вроде PHP, то был бы смысл в Memcached, просто поставив его между СУБД и приложением, кешируя результаты запросов можно значительно увеличить производительность. А вот использовать его с node.js я не вижу смысла, потому, что в ноде можно и так держать все в структурах данных в памяти приложения, ведь нодовские приложения "долгоиграющие", они не перезапускаются при каждом следующем GET/POST запросе и не освобождают память. Поэтому мы можем разместить в оперативной памяти кеш прямо внутри приложения и сэкономить на межпроцессовом взаимодействии (memcached это все же другой процесс). Но от межпроцессового взаимодействия все же нельзя полностью отказаться, если один процесс ноды не справляется, то нужно запускать несколько и приклеивать пользователей к процессам (ip sticky, cookie sticky), если же нужно будет организовать взаимодействие между двумя пользователями, приклеенными к разным процессам, то тут нам поможет Redis, ZMQ, RabbitMQ для передачи событий из процесса в процесс.
    Ответ написан
    2 комментария
  • Как лучше организовать структуру базы данных и что будет, если значение null?

    yamaoto
    @yamaoto
    la programmeur
    Обычно для добавления параметризации добавляют отдельную таблицу для параметров:
    /* параметры */
    CREATE TABLE Parameters (Id INT NOT NULL PRIMARY KEY, Name NVARCHAR(150) NOT NULL)
    /* возможные значения параметров */
    CREATE TABLE ParametersOptions (Id INT NOT NULL PRIMARY KEY, ParameterId INT NOT NULL, Value NULL NVARCHAR(150))
    /* привязка конкретному товару определенного значения параметра */
    CREATE TABLE ParametersValues(Id INT NOT NULL PRIMARY KEY,ProductId INT NOT NULL, ParameterId INT NOT NULL, Value INT NOT NULL)


    Тут столбец Value таблицы ParametersValues указан как необязательный.

    Также можно добавить таблицу навигации для категорий, чтобы можно было связать с определенной категорией серию параметров
    Ответ написан
    Комментировать
  • Практическая часть изучения ЯП и web технологий?

    pavel_salauyou
    @pavel_salauyou
    Symfony2 & Angular разработчик
    Заходите на odesk вбиваете в поиск, ключевые навыки и видите что кому нужно сделать выбираете для себя задачу и пилите её пилите днями и ночами.
    Ответ написан
    Комментировать
  • Практическая часть изучения ЯП и web технологий?

    Сейчас востребованы верстальщики под 1С: Битрикс, можете изучить структуру шаблонов и уже начинать работать.
    Ответ написан
    Комментировать
  • Практическая часть изучения ЯП и web технологий?

    @naneri
    PHP разработчик.
    Можете JS/Jquery выучить перед тем как начать изучать серверные языки программирования.
    JS позволяет сразу на практике начать применять программирование для добавления динамика в веб-приложения.
    Ответ написан
    Комментировать
  • Практическая часть изучения ЯП и web технологий?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Не можете придумать идею - воруйте. Просто напишите клон чего-либо что вы используете. Напишите клон того же тостера из того что попроще.
    Ответ написан
    Комментировать
  • Практическая часть изучения ЯП и web технологий?

    Gabs
    @Gabs
    Гуглите, ищите тут похожие посты, их тут туча. Зачем по 100 раз задавать один и тот же вопрос, не думаю, что людям самим нравится постоянно давать одинаковые ответы раз за разом, хотя кто знает.

    С вашими знаниями только сайты верстать

    Практикум htmlbook.ru/practical
    Ответ написан
    Комментировать
  • На каких сайтах можно найти интересные штуки на JQuery/CSS3?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Ответ написан
    Комментировать
  • На каких сайтах можно найти интересные штуки на JQuery/CSS3?

    @Snewer
    Увидели красивый элемент на чьем- то сайте — изучили его.
    Популярные JS фреймворки не в сжатом виде (JQUERY) — тоже много интересного
    Ответ написан
    Комментировать
  • Рефакторинг PHP кода

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Почитайте экстримальное программирование Кента Бэка, там хорошо описаны основные паттерны для рефакторинга. Правда там больше в контексте TDD, но рефакторинг без тестов это всегда боль.

    Что до приведенного кода:
    введите отдельные сущьности вместо StdClass. Для клониварония можно использовать clone.

    А так нужно разбираться в бизнес логике. Но у вас сейчас слишком много кода, можно легко запутаться.
    Ответ написан
    Комментировать
  • Чем заменить тег br?

    @impass
    Изучите назначение CSS-свойства white-space.
    А вообще, тэг <br> не является средством деления текста на абзацы, это мягкий перенос (en.wikipedia.org/wiki/Word_wrap#Soft_and_hard_returns) для использования внутри абзаца/контейнера.
    Ответ написан
    Комментировать
  • Чем заменить тег br?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Используйте абзацы (p).
    Ответ написан
    Комментировать
  • Почему через Stripe (USA) можно принимать платежи через свой сервер, а через PayOnline (Россия) нельзя - у мерчанта должен быть сертификат PCI DSS?

    PayOnline
    @PayOnline
    Сертификат PCI DSS необходим для приема платежей на сайте, если вы планируете обрабатывать данные карт на своем сервере, - вне зависимости от количества транзакций. От их количества зависит только уровень сертификата.
    На сайте Stripe, на странице https://stripe.com/us/features#seamless-security сообщается, что персональные данные на сервере клиента не обрабатываются.
    Если ваша потребность заключается в том, чтобы сделать свою форму оплаты и разместить ее на своем сайте (чтобы клиент не переходил на отдельную платежную страницу), PayOnline позволяет реализовать это с использованием Iframe.
    С удовольствием ответим на все ваши вопросы.
    Ответ написан
    1 комментарий
  • С чего начать изучение веб разработки на Python, человеку абсолютно не знакомому с backend?

    @Masterme
    Работа с веб отличается от работы с не-веб одной простой вещью:
    - сервер (апач, нжинкс и т.п.) получает запрос (а запрос - это строка) от браузера,
    - сервер обращается к приложению, передавая ему эту строку как аргумент,
    - приложение возвращает результат (тоже строку),
    - сервер отдаёт полученную строку в браузер.
    Конкретно для питона такое подключение скрипта к веб-серверу решается с помощью WSGI.
    Как это сделать. В настройках веб-сервера вы указываете документ_рут вашего приложения и скрипт с колбэком. Конфигурация для апача:
    <VirtualHost *:80>
         ServerName mysite
         DocumentRoot /var/sites/mysite/public
         WSGIScriptAlias / /var/sites/mysite/script.wsgi
     </VirtualHost>

    Колбэк - это функция в глобальном неймспейсе, называющаяся всегда application. Выглядит она примерно так:

    def application(environ, start_response):
        status = '200 OK' 
        output = 'Hello World!'
    
        response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
        start_response(status, response_headers)
    
        return [output]

    Когда апач получит запрос - он через wsgi запустит функцию application, а полученный от неё результат выдаст в ответ на запрос.

    Это всё, что нужно для понимания, как обрабатывать http-запросы из питона. Всякие джанги работают на этом же механизме.

    Теперь неочевидный нюанс. Дело в том, что обычно апач в нормальном состоянии отдаёт статику как статику. А если подключить к нему wsgi - то wsgi начнёт перехватывать и запросы к статике тоже. В джанго такая ситуация решается через жопу (что доказывает, что джангодрочеры - альтернативномыслящие), а именно: предлагается создать поддомен для статики и раздавать её сервером без wsgi, нжиниксом каким-нибудь, либо отдавать статику скриптом. Оба варианта, мягко говоря, спорные. Я считаю намного лучше и гибче третий вариант:
    <VirtualHost *:80>
         ServerName mysite
         DocumentRoot /var/sites/mysite/public
         RewriteEngine on
         RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
         RewriteRule (.*) /index.py/$1 [L,QSA,PT]
         WSGIScriptAlias /index.py /var/sites/mysite/script.wsgi
      </VirtualHost>

    (Обсуждается здесь.)
    Ответ написан
    20 комментариев
  • Свой jQuery плагин?

    Piterski
    @Piterski Автор вопроса
    В общем как оказалось jQuery.fn = jQuery.prototype. А значит в моем случае, если хочется использовать методы плагина таким образом, то пространство имен $.fn вообще не нужно.

    (function($){
        var methods = {
            init : function(options) { 
                console.log('init');
            },
            show : function( ) {
            
            },
            hide : function( ) {
            
            },
            update : function(content) {
                console.log(content);
            }
        };
    
        $.myPlug = function(method) {
            if (methods[method]) {
                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            } else if (typeof method === 'object' || ! method) {
                return methods.init.apply(this, arguments);
            } else {
                $.error( 'Метод с именем ' +  method + ' не существует для $.chats' );
            } 
        };
    })(jQuery);
    
    $.myPlug(); // init
    
    $.myPlug('update', 'Привет мир'); // Привет мир
    
    $.myPlug('blalbla') // $.error
    
    Ответ написан
    Комментировать
  • Какое key-value хранилище лучше?

    denver
    @denver
    Нет лучшего NoSQL хранилища вообще, есть под задачи, у каждого плюсы и ограничения. Redis супербыстр когда оперативки больше чем данных, иначе он часто подгружает с диска и сводит на нет скорость (если это еще не переделали), хорош для очередей сообщений, списков (встроены сортировки), всякой мелкой инфы. memcache (не memcached) самый быстрый но не флашит на диск ничего (собсвенно оттого и). memcached простейший key-value с флашем (хорош для очередей сообщений и всяких счетчиков). У последних двух особенность multiget — взять много ключей за раз работает столько же сколько и один, так что хорош для хранения «превьюшек» данных по их id, когда сортированные списки хранятся где-то еще (в редис). MongoDB не просто key-value, в ней можно хранить целые документы (пост со всеми комментариями), некий компромисс между nosql и RDBMS. Hbase уже совсем замена RDBMS, один из самых быстрых когда речь идет о IO диска, соответственно эта NoSQL для постоянного хранения стопитцот миллиардов данных. Cassandra похоже конкурент Hbase, но аутсайдер, т.к. фейсбук/твиттер от нее отказываются ;) Про CouchDB и Riak я ничего особенного не слышал (может кто дополнит — мне интересно)
    Ответ написан
    12 комментариев
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

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

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

    соответственно нужно учитывать, что при добавлении новой сигнатуры метода в интерфейс, его придется реализовать во всех классах, которые используют данный интерфейс. в абстрактном классе можно реализовать общее поведение по умолчанию для дочерних классов.
    Ответ написан
    1 комментарий