• Какой компрессор css использовать что бы при сжатии не удалял комментарии?

    gunlinux
    @gunlinux
    Freelancer
    gulp + sourcemaps
    gulp.task('styles', function () {
        return gulp.src('style.css')
            .pipe(sourcemaps.init())
            .pipe(minifyCss())
            .pipe(sourcemaps.write('.'))
            .pipe(gulp.dest(output + '/css'))
    });


    Оно хоть и потрет комментарии, но сгенерить source map и в инспекторе все увидим, я правильно понял, что задача в этом?

    https://github.com/jakubpawlowicz/clean-css#how-to... он же поддерживает опции оставить комментарии
    Ответ написан
    3 комментария
  • Можно простыми словами объяснить принцип работы метода Apply в Java Script?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    methods.init.apply(this, arguments);
    Здесь метод init объекта methods вызывается c переопределенным контекстом this и в него передаются все аргументы, которые были переданы в функцию easyFader.

    Проще, вроде, некуда.
    Ответ написан
    Комментировать
  • Зачем нужно знать машинный код?

    Denormalization
    @Denormalization
    Раньше, во времена *.com файлов, было модно прийти на тусовку, и прям в debug.exe написать програмку в машинных кодах, и все такие "АХ!!1"

    Но вообще да, это всё выдумки режисеров и сценаристов. Никто не пишет в машинном коде. Да, для reverse engineering можно запомнить несколько опкодов, но по большей части это никому не надо. (0.0001% кому это нужно - погрешность).
    Ответ написан
    1 комментарий
  • Зачем нужно знать машинный код?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Конкретно сейчас машинный код знать наизусть не обязательно - полно дизассемблеров, которые переведут код для тебя.
    Иметь представление о машинном коде чтобы понимать, как программа хранится и выполняется - обязательно для любого уважающего себя программиста, работающего с языками близкими к С.
    Особенно полезно иметь представление для работающих с embedded и другими железками
    Ответ написан
    Комментировать
  • Как быть с поддержкой свойств в JS?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Использовать babel + не забыть подключить https://babeljs.io/docs/usage/polyfill/
    Ответ написан
    Комментировать
  • Почему такой вариант работы с DOM считается темной стороной силы?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Потому что операции работы с DOM затратны по ресурсам и времени. Если элемент в DOM еще не добавлен, изменять его гораздо дешевле.

    Но в вашем конкретном случае это нормально - вы же работаете со всеми ячейками строки, а не с одной создаваемой. Разве что добавление кнопки "Добавить в корзину" лучше сделать сразу в создаваемую ячейку, тогда и искать ее не надо будет и на операциях с DOM сэкономите.

    Я бы переписал так:
    var classes = ['item-id', 'item-title', 'item-price'],
        table = document.getElementById('table'),
        rows = table.getElementsByTagName('tr'),
        rowIndex, cellIndex, cells, currentRow, currentCell, addToCartCell;
    
    // Пропускаем первую строку, потому что в ней находится заголовок таблицы
    for (rowIndex = 1; rowIndex < rows.length; rowIndex++) {
        currentRow = rows[rowIndex];
        cells = currentRow.getElementsByTagName('td');
    
        for (cellIndex = 0; cellIndex < cells.length; cellIndex++) {
            currentCell = cells[cellIndex];
            currentCell.setAttribute('class', classes[cellIndex]);
        };
    
        addToCartCell = document.createElement("td");
        addToCartCell.innerHTML = '<a class="add_item">Добавить в корзину</a>';
        currentRow.appendChild(addToCartCell);
    };

    Обратите внимание, что упростив код и дав понятные названия переменным, мы избавились от необходимости его комментировать.
    Многие разработчики (и я в их числе) считают необходимость в комментариях признаком плохого кода. Комментировать можно и нужно зачем мы что-то делаем, но что код делает, должно быть понятно из него самого.
    Я оставил один полезный комментарий в качестве примера.

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

    Можно было бы пойти чуть дальше и разбить код на маленькие независимые функции:
    function getTable() {
        return document.getElementById('table')
    }
    
    function getRows(table) {
        var allTableRows = table.getElementsByTagName('tr'),
            rows = [],
            index;
    
        // Пропускаем первую строку, потому что в ней находится заголовок таблицы
        for (index = 1; index < allTableRows.length; index++) {
            rows.push(allTableRows[index]);
        }
    
        return rows;
    }
    
    function appendAddToCartButton(row) {
        var cell = document.createElement("td");
        cell.innerHTML = '<a class="add_item">Добавить в корзину</a>';
        row.appendChild(cell);
    }
    
    function setCellsClasses(row) {
        var classes = ['item-id', 'item-title', 'item-price'],
            cells = row.getElementsByTagName('td'),
            index;
    
        // Обратите внимание, что здесь мы итерируем по классам, а не по ячейкам
        // В том случае, если в функции prepareTable кто-то по ошибке
        // поменяет местами строки добавления классов и кнопки добавления в корзину
        // код не сломается
        for (index = 0; index < classes.length; index++) {
            cells[index].setAttribute('class', classes[index]);
        }
    }
    
    function prepareTable() {
        var table = getTable(),
            rows = getRows(table),
            rowIndex, currentRow;
    
        for (rowIndex = 0; rowIndex < rows.length; rowIndex++) {
            currentRow = rows[rowIndex];
            setCellsClasses(currentRow);
            appendAddToCartButton(currentRow);
        }
    }
    
    prepareTable();

    Но в данном случае, скорее всего, это уже излишне.
    Ответ написан
    Комментировать
  • Книги vs оф. документация vs статьи vs видеокурсы: как лучше всего изучать новую технологию, или фрейворк?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    По библиотеке или фреймворку:
    1. Схема архитектуры и её понимание,
    2. hello world (код) и разбор ("наложение") кода на архитектурную схему.
    3. Понимание базового архитектурного "скелетона" приложения.
    4. Беглый взгляд по функциям OOB (out-of-box/"из-коробки")
    5. Просмотр возможности подключения плагинов и беглый взгляд по текущему списку и реализуемых ими функций.
    ------------
    Постановка себе задачи и начало реализации на изучаемом инструменте.
    Ответ написан
    Комментировать
  • Вы тоже постоянно всё забываете из программирования?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Нет.
    Проект должен иметь ЯВНУЮ структуру на основе директорий и краткое описание назначения папок (на крайний случай) и быть понятным по структуре папок.
    Если проект достаточно сложный - оставляйте в корне схемку архитектуры в графическом файле.
    Ответ написан
    Комментировать
  • Как реализовать параллельные вычисления?

    @aleks_raiden
    Для такой задачи очень хорошо подойдет Go - можно по отдельной горутине для каждого из обьектов завести и обсчитывать
    Ответ написан
    Комментировать
  • Как работает MVC controller?

    ppokrovsky
    @ppokrovsky
    Ответственность контроллера в MVC:
    1. Получение параметров из представления (GET/POST итд) и передача их в модель
    2. Возврат представления с параметрами, полученными из модели
    3. Валидация и фильтрация параметров в обе стороны
    4. Контроль доступа на основании правил, заложенных в модели

    То есть контроллер - это посредник между представлением и моделью. Контроллер по возможности не должен содержать бизнес-логику. Представление по возможности не должно вызывать методы модели напрямую, модель gо возможности не должна содержать примеси представления (HTML) и возвращать представление. "По возможности" - так как не всегда это возможно/оправдано с точки зрения трудозатрат разработки.

    Общее правило: тонкий контроллер и толстая модель.

    . Вопрос такой - контроллер создается для каждого запроса отдельно или один запрашивающий получает тот же самый контроллер, что и другой запрашивающий?


    Специфика веб-приложений в том, что на каждый запрос клиента создается новый экземпляр приложения, так как HTTP(S) - протокол без сохранения состояния (stateless).
    Для всех клиентов существует один общий класс контроллера (class myController), но на каждый запрос каждый клиент получает собственный экземпляр контроллера (new myController)

    если один пользователь запросит экшен1, а второй пользователь после этого запросит экшен2 - не может ли он получить значение "9"?


    нет, второй пользователь получит 5, так как взаимодействует с собственным экземпляром контроллера.
    Ответ написан
    2 комментария
  • Как сделать свои собственные лайки на сайте?

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

    https://github.com/Valve/fingerprintjs2
    +
    https://github.com/samyk/evercookie/ (перед установкой переименуйте все скрипты, чтобы не блокировались adblock-ом)

    Про привязку к ip забудьте.
    Ответ написан
    1 комментарий
  • Как правильно организовать Git репозиторий?

    Изучите gitflow.
    Скорее всего эта методика будет для вас избыточна, но основные приемы вроде: "отдельная ветка на каждую задачу" или "стабильный мастер + develop для разработки" определенно пойдут на пользу.
    Ответ написан
    2 комментария
  • Как правильно организовать Git репозиторий?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    git изначально был спроектирован так, что ветки практически ничего не весят.
    Пользуйтесь ветками так, как вам удобно.

    В идеале сделайте одну ветку master, куда заливаются уже проверенные "красивые" коммиты для отчета, и develop, в которую заливаете коммиты для проверки уже общих изменений. А локально каждый девелопер может себе хоть на каждый новый таск делать ветку, которую затем мержить в develop
    Ответ написан
    Комментировать
  • Какая разница между C, C#, C++?

    @dmitryKovalskiy
    программист средней руки
    Разница в количестве плюсиков. У первого -0 , у второго - 4, у третьего - 2. Новичку лучше учить C++. А если серьезно : С- язык низкого уровня для системного программирования, драйверов и другой низкоуровневой разработки. С++ - тоже самое с обвесами из классов, перегрузок, шаблонами и некоторыми другими фичами. С# - ООП язык для разработки под .NET - Microsoft-стек технологий для разработки самых разных приложений.
    Ответ написан
    Комментировать
  • Как организовать файловое хранилище пользователей (виртуальная фс или нативная)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Сразу бросилось в глаза:
    Плюсом считаю, что можно к такой схеме получать доступ по фтп, чего не будет у первой.
    А кто сказал, что к виртуальной структуре нельзя сделать FTP-доступ?!) Правда, придётся свой FTP-сервер написать, который понимает вирт. ФС и то при условии, что существующих не будет достаточно: они как правило позволяют делать виртуальные папки пользователей на основе правил конфига, но в базу лазить (в своём большинстве) не умеют.

    Лучше использовать виртуальную ФС потому, что Вы не будете "привязаны" к ограничениям файловой системы (кол-во всего каталогов/файлов, макс. глубина вложений и прочее) и сможете легко шардировать хранилище на несколько серверов с учётом бэкапов, отказоустойчивости/RAID и т.п.
    Ответ написан
    Комментировать