• Как правильно именовать таблицы, столбцы в базе данных?

    JohnnyGat
    @JohnnyGat
    Стараюсь писать код, понятный человеку.
    SQL Style Guide - www.sqlstyle.guide
    Перевод на русский - www.sqlstyle.guide/ru
    Ответ написан
    6 комментариев
  • В чем разница тестов?

    @Yan-s
    Юнит тесты - для тестирования коротких изолированных фрагментов кода, отдельных методов. Проверяем, что элементарный метод работает корректно сам по себе.

    Функциональное тестирование - тестирование функционала системы. Тут проверятся что определенный запрос дает определенный ответ, приводит к определенным результам. Например, что переход пользователя по определенному адресу должен выдать HTML страницу с некими данными. Проверка работоспособности системы с точки зрения пользователя.

    https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D...

    https://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D...
    Ответ написан
    Комментировать
  • В чем разница тестов?

    kit_de
    @kit_de
    Моя... Твоя... Привет!
    Классика. Ответ кроется в вопросе.
    Unit test. Тестирование маленького кусочка кода. Атомарное тестирование.
    Feature test. Тестирование определенной фичи.

    ИТОГ
    Разница в охвате функционала: unit test - атомарно, feature test - глобально (в контексте фичи).

    PS:
    Маленький кусочек кода. Метод. Минимально самостоятельная единица.
    Ответ написан
    Комментировать
  • Как настроить NGINX для ЧПУ Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Все, что нужно для ЧПУ в WordPres + Nginx это:

    1. try_files $uri $uri/ /index.php?$args; в конфиге
    2. Пересохранить пермалинки (WordPress admin - Settings - Permalinks)

    Если не работает - проблема в другом месте. Надо смотреть логи, начните с Nginx access.log и error.log
    Ответ написан
    Комментировать
  • Дерево категорий Laravel. Как уменьшить количество запросов в БД?

    @jacob1237
    Если используете PostgreSQL, посмотрите в сторону рекурсивных подзапросов.

    Если это не PostgreSQL, то можете попробовать строить дерево из "сырых данных" непосредственно в PHP (как подсказывает Вам ThunderCat ).

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

    Таких основных моделей четыре: Adjacency list, Nested Sets, Materialized Path и Closure Tables (можно рассматривать как развитие Adjacency List) плюс их вариации.

    Каждый тип модели может послужить для оптимизации выборки данных из древовидных структур в БД.

    Присутствуют готовые библиотеки и для Laravel:
    Nested Set
    Closure Tables

    Для Adjacency List (вашей текущей реализации), просто сортируйте данные самостоятельно, либо попробуйте этот пакет.
    Ответ написан
    3 комментария
  • Лучший редактор кода с ftp?

    arsenty
    @arsenty
    Full Stack Designer
    Не знаю, что вы имеете ввиду под полноценностью фтп-клиента, но в моём мире, любой инструмент встроенный в стороннее приложение по определению не может быть полноценным. :)

    PS: Atom Commander меня вполне устраивал.
    Ответ написан
    Комментировать
  • Как посмотреть список файлов коммита?

    gobananas
    @gobananas
    finishhim.ru
    git log --name-only
    Ответ написан
    Комментировать
  • Как удалять запись из бд по таймеру?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    операция delete дорогая.
    крон может не сработать.
    не запускается чаше 1 раза в минуту.
    проще иметь поле expired
    select * from where id=? and expired меньше now()
    Ответ написан
    1 комментарий
  • Почему говорят, что postgress лучше для более-менее серьезного проекта чем что-либо иное?

    @abroabr
    Не так.

    Серьезные проекты, например, у того же Google прекрасно работают и с MySQL

    Дело в другом - у PostgreSQL больше функционала. Если он вам нужен и если вы умеете им пользоваться.

    У MySQL функционала меньше, он проще, и потому во многих случаях быстрее.

    Но реализация функционала, отсуствующего в MySQL надстройкой над MySQL обойдется дороже по производительности, чем использование такового уже имеющегося функционала в PostgreSQL.

    Как пример, JSONB (рекомендую его в PostgreSQL, работает эффективно, позволяет реализовать schemeless). Не путать с JSON (это старая реализация в PostgreSQL, не рекомендуется).

    Смотрите выступления Олега Бартунова на Youtube - он разработчик PostgreSQL и проводит просветительскую работу по некоторым особенностям PostgreSQL.
    Ответ написан
    8 комментариев
  • Почему говорят, что postgress лучше для более-менее серьезного проекта чем что-либо иное?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Этот вопрос на Тостере задают примерно раз в неделю и в Интернете полно сравнений. Например, это или это. Для меня лично самый главный косяк MySQL в том, что в 2018-м году он даже стандарт SQL 92-го года поддерживает не в полном объёме. Или вот косяк из недавнего вопроса - он не запускает триггер на действиях с внешними ключами. И таких косяков просто чудовщное количество. Как только выходишь за рамки чего-то сложнее select * from some_table, начинаешь материть разработчиков ежесекундно. И ещё один факт, мало влияющий на повседневную работу, но достойный упоминания - при проверке статическим анализатором кода нескольких популярных СУДБ, MySQL по количеству ошибок оказался на первом месте с существенным отрывом!
    Ответ написан
    11 комментариев
  • В чем отличие между git push -u origin master и git push origin master? Зачем ключ -u для команды git push?

    EXL
    @EXL
    Энтузиаст
    В том случае, если ветка master (или branch_name) не является отслеживаемой веткой origin/master (или origin/branch_name), а вы хотите сделать её таковой.

    Выполнив команду git push -u origin master вы устанавливаете связь между той веткой, в которой вы находитесь и веткой master на удалённом сервере. Команду требуется выполнить единожды, чтобы потом можно было отправлять/принимать изменения лишь выполняя git push из ветки без указания всяких алиасов для сервера и удалённых веток. Это сделано для удобства.
    Ответ написан
    2 комментария
  • Объясните как работает php-fpm?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала почитайте что такое SAPI. Затем представьте что apache + mod_php разделили на web-сервер, который проксирует запросы на php-fpm и отдает статику, и собственно отдельный web-сервер который имплементит SAPI и выполняет запросы связанные только с php. То есть статику отдавать мы можем только через php. Суть примерно та же что и у apache2 + prefork + mod_php но оптимизированный только для работы с php. Так же можно поставить на фронт более быстрый и легковесный сервер который умеет проксировать запросы.

    То есть php-fpm это эдакий fast-cgi сервер который постоянно держит готовые для работы пул-процессов (сколько в пуле процессов настраивается, так же как и от какого пользователя их запускать и все такое прочее). Каждый новый запрос уходит в какой-либо процесс из пула, запрос отрабатывает, возвращаем результат тому кто попросил (web-серверу обычно). Если процесс падает (fatal допустим) - поднимаем новый.

    Принципиальной разницы между apache2+mod_php нету, просто упрощается инфраструктура. Наш web-сервер должен только уметь проксировать запросы и отдавать статику, а php-frpm вообще может быть на разных машинах (балансировщиком можно раскидывать запросы). Ну и сами понимаете, nginx + php-fpm будет быстрее обрабатывать запросы чем apache2+mod_php какой бы мы менеджер процессов не использовали в апаче. Минусов по сравнению с apache+mod_php я даже не могу предложить.

    А php-runtime не зависит от этого. Он один на всех, CLI, FPM, mod_php...
    Ответ написан
    7 комментариев
  • Почему вылетает ошибка Maximum call stack size exceeded?

    In4in
    @In4in
    °•× JavaScript Developer ^_^ ו°
    Почитайте про всплытие событий.

    $('.squares__item').on('click', function() {
        $(this).find('.squares__des__button').click();
        //Событие всплывает и происходит новый клик по .squares__item
        //А на нем висит вызов клика по .squares__des__button
       //И так бесконечно
      })


    Можно использовать
    stopPropagation()
    но зачем?

    Лучше повесьте единственный обработчик на .squares__item. Тот, что на бедную кнопку навесили. Суть не изменится, но ошибка уйдет.
    Ответ написан
    Комментировать
  • Есть ли разница в вызове js анонимных функций при передачи параметров?

    Stalker_RED
    @Stalker_RED
    Лишние скобки результат не меняют.
    (x=>2+x)(3) // -> 5
    ((x=>2+x))(3) // -> 5
    ((x=>2+x)(3)) // -> 5
    (x=>2+x)((3)) // -> 5
    Ответ написан
    Комментировать
  • Что значит оборачивание функции в скобки (function() { ... })?

    copist
    @copist
    Empower people to give
    Короткий ответ
    (function() { ... })()
    Это определение анонимной функции без параметров и непосредственный вызов её, так же, без параметров

    Длинный ответ
    Зачем оборачивать значение в круглые скобки?

    Оборачивание функции в скобки, так же как и оборачивание константы в скобки - это просто способ показать интерпретатору, что это значение внутри скобок может быть использовано как возвращаемое значение.
    var var_a = 5
    (var_a) /* или */ (5) // не является ошибкой, возвращает значение переменной или выражения
    function func_b() { }
    (func_b) /* или */ (function func_b() { }) // не является ошибкой, возвращает ссылку на функцию
    var var_c = { key: "val" }
    (var_c) /* или */ ({ key: "val" }) // не является ошибкой, возвращает объект
    var var_d = [ "one", "two" ]
    (var_d) /* или */ ([ "one", "two" ]) // не является ошибкой, возвращает массив


    Ну а раз (func_b) - это ссылка на функцию func_b, то значит её можно сразу же вызвать.
    A если (var_c) - это объект, то значит можно сразу же использовать его
    Аналогично (var_d) - это массив, то значит можно сразу же использовать его

    (func_b)() или (function func_b() { })() вызвать функцию
    (var_c).key или ({ "key": "val" }).key использовать объект
    (var_d)[0] или ([ "one", "two" ])[0] использовать массив

    Синтаксической ошибкой было бы использование функции, массива, объекта без скобок ( )
    function func_b() { }() ошибка "Unexpected token )"

    Хотя нет ошибки, по крайней мере в Google Chrome
    { key: "val" }["key"]
    ["one", "two"][0]

    Для чего вообще придумали самовызывающиеся функции?
    Для того, чтобы изолировать переменные и функции, чтобы они не попадали в глобальную область видимости.

    Сравни
    var a = "test"
    alert(a)

    по завершении этого блока переменная a болтается в глобальной области видимости

    и
    (function(){
        var a = "test"
    })()
    
    alert(a) // недоступно, потому что она была локальной переменной внутри анонимной функции


    Почему скобки ( ) пустые?
    В данном случае у функции function() { ... }нет формальных параметров, значит и вызывать можно без параметров.

    Но вообще в самовызывающуюся функцию можно передавать параметры. Это общая практика передачи ссылок на глобальные объекты:

    (function (w, d, $) {
       // некоторым нравится сокращать код путём использования коротких имён переменных
       w['fizz'] = "buzz" // вот так можно принудительно зарегистрировать
                           // глобальную переменную fizz
       $('body').css({background: 'red'}) // вот так можно работать с jQuery через привычную $
                           // даже если библиотека была загружена в режиме noСonflict
    }(window, document, jQuery))


    Некоторым не нравится длинный вариант проверки на undefined и они специально предусматривают лишний параметр, который не инициализируют

    (function (message1, message2, empty) {
        // это и есть проверка на undefined
        if (message1 === empty)
            alert('message1 is undefined')
        else
            alert('message1 = ' + message1)
    
        if (message2 === empty)
            alert('message2 is undefined')
        else
            alert('message2 = ' + message2)
    })("test") // вызвана только с одним параметром, значит второй по имени message2
    //  будет пустой, а третий empty специально ввели в качестве образца
    //  данных с типом "undefined", для служебного использования

    Зачем функция анонимная?
    Аналогично - чтобы не регистрировать её имя в глобальной области видимости, если она нужна один раз.
    Ответ написан
    7 комментариев
  • Как составить такое регулярное выражение?

    @lemme
    Frontend
    /^[1-9]{2}\d{10}$/
    Ответ написан
    Комментировать
  • Увидим ли мы C# на Linux?

    dordzhiev
    @dordzhiev
    Если говорить кратко, то под линукс есть две основные реализации CLR и BCL: Mono и .NET Core.

    С Mono все понятно, сторонняя реализация возглавляемая Мигелем де Икаса (один из основателей GNOME). Mono уже переболела свои детские болезни, и очень даже хорошо справляется со своей задачей. Более того, с открытием исходников .NET, разработчики постепенно заменяют свой код для большей совместимости с MS-реализацией.

    Но не так давно Microsoft объявила о разработке своей собственной реализации под названием .NET Core. Грубо говоря это привычный нам CLR (CoreCLR) и урезанная BCL (CoreFx), но не требующая установки и с открытым исходным кодом. И самое главное - кроссплатформенность. Официально портируется на Linux и Mac OS X, но разработчики с радостью принимают пулл-реквесты, так что силами сторонних разработчиков постепенно делается поддержка Free BSD.

    Параллельно с этим ведется разработка ASP.NET 5 и EF7, которые будут работать и на .NET Core. Так что да, в скором времени ASP.NET и консольные приложения будут хорошо себя чувствовать и на Linux, и на других ОС.

    Более того, совсем недавно Microsoft объявила о начале работы над LLILC - компилятор IL -> IR, что позволит для работы .NET приложений использовать LLVM вместо CLR. Что это даст? Больше поддерживаемых платформ, .NET приложения смогут работать на всех архитектурах, поддерживаемых LLVM.

    Хотите узнать как обстоят дела? Следите за гитхабом: .NET Core и ASP.NET. Оба проекта принимают пулл-реквесты, так что вы всегда можете помочь проектам.
    Ответ написан
    2 комментария
  • Как быстро верстать сайт по psd/png/jpg эскизам?

    @dmitry_pacification
    Трудности рождают прорыв
    Держи, это самый лучший верстальщик в Украине
    https://www.youtube.com/watch?v=tdRuZfZW99A
    Ответ написан
    Комментировать
  • Событие jQuery при попадание элемента в поле зрения пользователя?

    userAlexander
    @userAlexander
    Верстка наше все)
    В поле зрения пользователя это значит когда пользователь доскроллил до элемента который находиться где то в контенте?

    Например
    var target = $('.elem');
    var targetPos = target.offset().top;
    var winHeight = $(window).height();
    var scrollToElem = targetPos - winHeight;
    $(window).scroll(function(){
    	var winScrollTop = $(this).scrollTop();
    	if(winScrollTop > scrollToElem){
    		//сработает когда пользователь доскроллит к элементу с классом .elem
    	}
    });
    Ответ написан
    4 комментария