• Как сделать эффект матового стекла на css?

    backdrop-filter

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

    @GreatRash
    Вот тут, можно нажать CTRL+U, промотать в самый низ и почитать скрипты.
    Ответ написан
  • Стоит ли обучаться на MDN (https://developer.mozilla.org/ru/)?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    На /ru — нет. Я самолично исправлял перевод, который был диаметрально противоположен по смыслу оригиналу.
    А вот исходные материалы там очень даже круты.
    Ответ написан
  • Как сделать google карту с градиентом?

    dom1n1k
    @dom1n1k
    Нужно объяснить дезигнеру, что он не прав и выбросить градиент в мусорное ведро.
    Оранжевый цвет можно оставить - гуглокарты имеют нативную возможность кастомной раскраски.
    Ответ написан
  • Возможно ли решить данную задачу?

    @Mercury13
    Программист на «си с крестами» и не только
    1018 — это обычное 64-битное целое. long long в Си, long в Java, int64 в Delphi.

    Очевидно, задача переводная, спичка не только match (это слово у них очень многозначное), но и matchstick. Причём переводил то ли автомат, то ли редкий надмозг, пример неговорящий, и откровенно непонятно: то ли где находится число 11, то ли что на 11-й позиции. Будем решать 2-ю задачу: что на 11-й позиции.

    1. Определить количество разрядов (для этого хватает несложного цикла) и какой номер у данного числа среди N-значных чисел.
    2. А теперь находим, сколько есть N-значных чисел из M спичек. Рекуррентное соотношение:

    Q[N, M] = sum{k = 1..9} (Q[N−1, M−q(k)]), если N — найденная нами значность, но не 1-ца,
    Для остальных N формула та же, но суммирование 0…9.
    q(0) = 6, q(1) = 2, q(2) = 5, и т.д. — кол-во спичек в цифре.
    Граничное условие: Q[0, 0] = 1, Q[0, M] = 0 для остальных M.
    «Методом выкручивания рук» также примем, что для отрицательных M все Q равняются 0.

    Решаем рекуррентное соотношение динамическим программированием.
    3. А теперь самое интересное: воспользовавшись таблицей динамического программирования, находить цифру за цифрой, начиная со старшей.

    Например, у нас 15-е число. Первый шаг опустим, поверьте мне: это 4-е двузначное, начиная с нуля.
    2-й шаг.
    Q[1,2] = 1
    Q[1,3] = 1
    Q[1,4] = 1
    Q[1,5] = 3
    Q[1,6] = 3
    Q[1,7] = 1
    Q[2,4] = 1
    Q[2,5] = 2
    Q[2,6] не вычислял, главное — запредельно большое.

    Q[2,0]…Q[2,3] равняются нулю.
    Вычитаем Q[2,4] — получается 3.
    Вычитаем Q[2,5] — получается 1.
    Вычитаем Q[2,6] — не получается. Итого у нас шесть спичек, остаётся 1.

    3-й шаг, работаем по цифре.
    Ноль, Q[1, 6−6] = 0. Остаётся 1.
    Единица, Q[1, 6−2] = 1. Остаётся 0.
    Двойка, Q[1, 6−5] = 0. Остаётся 0.
    Тройка, Q[1, 6−5] = 0. Остаётся 0.
    Четвёрка, Q[1, 6−4] = 1. Не вычитается, остаётся 2 спички, 1 знак и номер 0. Записываем цифру 4.
    Ноль, Q[0, 2−5] = 0. Остаётся 0.
    Единица, Q[0, 2−2] = 1. Не вычитается, остаётся 0 спичек, 0 знаков и номер 0. Записываем цифру 1.

    Итого получили 41.
    Ответ написан
  • Какой правильный путь рабочего окружения на локальной машине и удаленных серверах?

    @D3lphi

    По локальной разработке: Поднимать 1 вагрант бокс и в нем все сайты? В принципе достаточно удобно либо под каждый сайт свой вагрант бокс? Сайты у меня бывают десятками..... Или их както группами объединить?

    Нет, в идеале, на каждый "сайт" нужно поднимать свою виртуалку. Иначе, какой смысл? Вся суть Vagrant'а - иметь отдельное, независимое от других проектов, окружение.

    Как развернуть (в идеале) такоеже окружение на ВПСи обновлять его также автоматом?

    Посмотрите в сторону Docker'а. Он позволяет создавать "образы" системы и мгновенно разворачивать их где бы то ни было.
    Ответ написан
  • Лицензия для wow.js?

    @Z-r
    > Есть библиотека wow.js. Оригинал и случайно мною обнаруженный её форк. Так вот если я все правильно понял, то чтобы использовать оригинал в коммерческих проектах нужно заплатить, в то время как форк бесплатный полностью

    Нет, вы неправильно поняли. Обе программы: и «WOW» Матье Оссагеля (оригинал) [0] и «WOW» Томаса Грэйнджера (форк) [1] *свободны*, а значит их по определению можно использовать в коммерческих целях без уплаты роялти, коль скоро вы завладели их копиями.

    Актуальная версия первой свободна на условиях GNU GPLv3= (что указано не очень корректно, но проблемы это не создает), второй — на условиях лицензии Expat’а (указана корректно).

    Тов. Оссагель и компания также продают исключения из сильного авторского лева GNU GPL.

    [0] https://github.com/matthieua/WOW
    [1] https://github.com/graingert/WOW

    > автор форка взял и форкнул платный оригинал и сделал его бесплатным. разве так можно?

    (Платный / бесплатный, как вы уже поняли, слова здесь неподходящие.)

    Тов. Грэйджер сделал форк с последней ревизии, доступной на условиях лицензии Expat’а [2]. Да, так можно — как и любая другая свободная лицензия, она *безотзывна*.

    [2] https://github.com/matthieua/WOW/tree/37c0fa79463f...

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

    И то, и другое. Не забывайте только соблюдать условия договоров — они есть у обоих.

    Да, и хотя это вы и сами уже посмотрели, но для наглядности масштабов приведу. Вот это все, что сделано за прошедшие полтора года со смены лицензии у т. Оссагеля:

    $ git diff 5038 -- . ':(exclude)dist'
    diff --git a/Gruntfile.js b/Gruntfile.js
    index 05052e5..3261256 100644
    --- a/Gruntfile.js
    +++ b/Gruntfile.js
    @@ -8,15 +8,15 @@ module.exports = function(grunt) {
         uglify: {
           dist: {
             files: {
    -          'dist/<%= pkg.name %>.min.js': 'dist/<%= pkg.name %>.js'
    +          'dist/wow.min.js': 'dist/wow.js'
             }
           },
           options: {
    -        banner : '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
    +        banner : '/*! <%= pkg.title %> - v<%= pkg.version %> - ' +
               '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
               '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' +
               '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' +
    -          ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */',
    +          '*/',
             report: 'gzip'
           }
         },
    @@ -50,7 +50,7 @@ module.exports = function(grunt) {
           }
         },
         jasmine : {
    -      src     : ['spec/javascripts/libs/*.js', 'dist/<%= pkg.name %>.js'],
    +      src     : ['spec/javascripts/libs/*.js', 'dist/wow.js'],
           options : {
             specs   : 'spec/javascripts/**/*.js',
             helpers : 'spec/javascripts/helpers/**/*.js'
    diff --git a/README.md b/README.md
    index 7f281f7..2800b20 100644
    --- a/README.md
    +++ b/README.md
    @@ -52,7 +52,18 @@ It just take seconds to install and use WOW.js!
        bower install wowjs
     ```
     
    +- NPM
    +
    +```bash
    +   npm install wowjs
    +```
    +
     ### Basic usage
    +In order to hide all elements when they are supposed to be hidden. (Anti Flickering)
    +- CSS
    +   .wow {
    +     visibility: hidden;
    +   }
     
     - HTML
     
    diff --git a/bower.json b/bower.json
    index 4a75b7a..eb9c1ed 100644
    --- a/bower.json
    +++ b/bower.json
    @@ -11,7 +11,7 @@
         "animation",
         "reveal"
       ],
    -  "license": "MIT",
    +  "license": "GPLv3",
       "ignore": [
         "**/.*",
         "node_modules",
    diff --git a/package.json b/package.json
    index b48c2f9..f57d902 100644
    --- a/package.json
    +++ b/package.json
    @@ -1,7 +1,7 @@
     {
    -  "name"            : "wow",
    +  "name"            : "wowjs",
       "title"           : "WOW",
    -  "version"         : "1.1.2",
    +  "version"         : "1.1.3",
       "description" : "",
       "keywords": [],
       "homepage"        : "",
    @@ -10,6 +10,7 @@
         "email" : "matthieu.aussaguel@gmail.com",
         "url"   : "http://mynameismatthieu.com/"
       },
    +  "main": "./dist/wow.js",
       "repository" : {
         "type" : "git",
         "url"  : "git://github.com/matthieua/WOW.git"
    @@ -18,9 +19,12 @@
         "url" : "https://github.com/matthieua/WOW/issues"
       },
       "licenses": [{
    -    "type": "MIT",
    -    "url": "http://matthieuaussaguel.mit-license.org/"
    +    "type": "GPLv3",
    +    "url": "http://mynameismatthieu.com/WOW"
       }],
    +  "dependencies": {
    +    "animate.css": "latest"
    +  },
       "devDependencies" : {
         "grunt"                : "latest",
         "grunt-cli"            : "latest",


    Тов. Грэйджер отказался от «Кофескрипта», так что у него столь наглядно уже не будет.
    Ответ написан
  • Тестовые задания по nodejs для новичка?

    mannaro
    @mannaro Куратор тега JavaScript
    Умею профессионально гуглить
    Есть прикольное задание, которое нашел как-то на просторах интернета:

    Управление виртуальным центром запуска ракет.
    Есть несколько баз (при запуске сервера они "создаются" заново).
    Нажимаешь кнопку, выбираешь цель и ракета летит, транслируя свои координаты на клиент (+ оставшееся время).
    В момент полета может произойти авария и ракета не долетит, надо чтобы это выводилось пользователю в браузер.
    Когда ракета долетает, то базе наносится урон (вычисляется случайно). Когда у базы жизней < 0 игра считается завершенной и пользователю об этом показывается сообщение при загрузке страницы.
    Все это на сервере работает через JSON, а на клиенте через react/angular/custom и обновляется в реалтайме через long-polling или websocket.

    интерфейс - просто выпадающий список, а после нажатия на кнопку один див с координатами, второй с оставшимся временем.
    Ответ написан
  • Как получить дату на 30 минут больше текущей?

    @Snewer
    Дополняя предыдущие ответы скажу, что если манипуляций с датой / временем много то рекомендую посмотреть на библиотеку https://momentjs.com/
    Ответ написан
  • Библиотека асинхронных запросов для react?

    Да, такая библиотека есть. Проблема в том, что в JS нативные промисы (Promise) нельзя отменить (not cancelable)... но при этом - у нас есть генераторы, которые вполне себе позволяют имитировать отмену выполнения какой-либо функции, скажем, в середине.

    Для того, чтобы все заработало - вам нужно использовать связку из любой понравившейся библиотеки для непосредственно запросов (я предпочитаю isomorphic-fetch), затем взять redux и middleware для него (редакса) - redux-saga.

    Если вы не знакомы с экосистемой редакса или первый раз слышите про redux-saga - прочтите документацию, посмотрите уроки. Если вкратце - библиотека построена на генераторах. Функция-генератор возвращает итератор и ее выполнение прекращается каждый раз, когда мы возвращаем итератору новое значение (yield)

    Ниже продемонстрирую как это примерно работает:

    function* myCancelableAction(someData) {
      // вернет итератору промис и приостановит работу функции до следующего вызова next
      // в нашем случае - функция продолжит выполнение, когда придет ответ сервера
      const response = yield doAjaxRequest(someData) 
      yield dispatchSuccessAction(response)
    }
    
    const action = myCancelableAction();
    const promise = action.next().value // fetch promise
    
    promise.then(response => {
      // если новых запросов не поступило
      if(!newRequestIsComing) {
        // мы можем передать значение в нашу функцию (через next)
        console.log(action.next(response).value); // dispatched action
      }
    })


    Таким образом, после того, как функция вернула значение первый раз, применительно к теме поста это будет "сделай AJAX-запрос", мы можем не выполнять ее дальше (если захотим). Отменить ajax запрос в этом случае не получится, но мы можем просто не учитывать его результаты (не диспатчить success-экшен, например).

    UPD1 обновил пример кода
    Ответ написан
  • Можно ли в Raid вставлять диск большего объема?

    Jump
    @Jump
    Системный администратор со стажем.
    Можно ли в Raid вставлять диск большего объема?
    Да.

    Я правильно понимаю, что в втором массиве требуется заменить диск в 3 Тб.
    Да.

    Насколько принципиален вендор?
    Не имеет значения.

    Не развалится ли массив, если я воткну другой диск 3 Тб?
    Нет.

    В первом массиве возможно ли поставить диск другой модели и емкости например 500 Гб ?
    Да.

    Уточнение - диск может быть любой, емкостью не менее того что в массиве. Скоростные показатели массива будут определятся самым медленным диском массива. Диск должен поддерживаться компьютером и контроллером.

    И если вы не имеете опыта работы с этими массивами на этом контроллере - сделайте бэкап, или убедитесь что есть достаточно свежий бэкап.
    А если опыт есть - тогда просто сделайте бэкап, или убедитесь что есть достаточно свежий бэкап.
    Ответ написан
  • Как легально держать веб-сервис, подразумевающий получение прибыли (например ежемесячная подписка)?

    Jump
    @Jump
    Системный администратор со стажем.
    Вы просто несколько неправильно воспринимаете веб сервис И это порождает массу ненужных вопросов, на которые сложно ответить.
    Веб сервис не является самостоятельным хозяйствующим субъектом. Это просто инструмент, оборудование.
    В общем веб сервис с этой точки зрения ничем не отличается от холодильника для замороженной рыбы в магазине. Он просто помогает коммерсанту продавать или оказывать услуги. И холодильник не может заключать договора, платить налоги, и совершать денежные операции.

    Пока понял что ИП или ООО регистрировать в любом случае нужно.
    Да, поскольку прибыль регулярная, без этого не обойтись.

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

    Нужно ли получать какую-либо лицензию?
    Если вы ведете какаю-то деятельность которая подлежит однозначному лицензированию - например торгуете оружием, однозначно нужно получать, если нет, то не нужно.

    Нужно ли уведомлять какую-нибудь гос.структуру о том, что я храню персональные данные?
    Статья 22 пункт 1 федерального закона N 152-ФЗ
    В общем - нужно, если вы не попадаете под исключение указанное в статье 22 часть 2 федерального закона N 152-ФЗ

    А о том, то на моем сайте можно провести какую-либо денежную операцию?
    Тут все просто - на вашем сайте однозначно нельзя провести какую-то денежную операцию! Это просто физически невозможно.
    Денежные операции проводятся через банки, процессинговые центры, расчетные счета, платежные системы, наличный расчет.

    И раз уж на то пошло, сколько можно этим заниматься нелегально, при каких объемах и что за это грозит?
    www.consultant.ru

    Как работать с юриками если ты веб-сервис? Типовой договор с каждым? Выставлять счета по почте + ЭЦП?
    Неправильный вопрос. Веб сервис не может работать ни с юриками ни с физиками. Он работает с компьютерами.
    С юриками и физиками работают другие юрики и физики.
    Т.е договора с юриками будет заключать ни в коем случае не веб сервис, а организация или предприниматель которому принадлежит этот вебсервис.
    Ну а дальше все как у всех - обычная работа организации или предпринимателя с контрагентами.
    Вариантов заключения договоров и документального оформления масса, все зависит от вашей ситуации.
    Ответ написан
  • Как компьютер понимает нули и еденицы?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Ну типа жил был транзистор значит. И он был такой весь из себя крайне радикальный - не было у него по жизни других настроений, кроме двух - либо он говорил всем "да" и пропускал через себя всё, что в одно ухо (левая дырка) влетело, то из другого (правая дырка) сразу вылетало. Либо же настроение его могло поменяться, тогда он становился крайне негативным и переставал пропускать себя любую информацию - замыкался в себе, думал о главном.
    А настроение его зависело от того, насколько хорошо он питался. Суёшь ты ему в рот (третья дырка) нормальное питание - он добрый, на всё согласен, информацию через себя пропускает. Чуть только начинаешь его кормить меньше, чем он хочет (есть у него определённый уровен неообходимого питания) - он тут же отключался от мира и ни на что не реагировал, пока снова не пихнёшь ему в рот достаточноого питания. Так и получилось, что аналоговый уровень питания, то есть количество еды, которое ты ему кладёшь в рот, в итоге превращается в бинарное значение - 0 или 1 на правом ухе.

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

    И вот в современных процессорах миллионы этих транзисторов (если быть точнее, то на текущий момент около 1,400,000,000) спаяны вместе. чтобы распознавать входные команды и выдавать результат по заданной схеме.

    Ты спросишь, мой маленький друг, как же розетка соединяется с процессором? Как эти 220В превращаются в 0 и 1 на моём мониторе?. А всё дело в том, что блок питания преобразует переменный ток в постоянный, который потом подаётся на процессор. Блок питания совсем не мудрёный - пара диодов и трансформатор, можешь даже собрать его сам дома из говна и палок. А интересное дальше.
    Но если подать ток на схему из транзисторов - то они застынут в одном положении, заданном схемой, и ничего происходить не будет? Да, ты прав, чтобы компьютер считал, необходимо менять ток на его входных ножках, тем самым отдавая ему разные команды. Но тут возникает проблема синхронизации - поменять напряжение одномоментно невозможно (физика, типа, химия там, электроны бегают, заряд меняется, дырки должны образоваться успеть) - нужно определённое время. Поэтому придумали "частоту". Рядом с транзисторами сидит важный кристалик, который генерирует ток по синусоиде с равномерной частотой. Эта синусоида немного рихтуется, превращаясь в бесконечный поток "есть питание" и "нет питания" меняющийся с одинаковой частотой. На графике это выглядит как пила, примерно. И вот все договорились, что будут засекать момент, в котором "всё готово", все транзисторы заняли своё положение и всё устаканилось и наконец можно считать выходной результат, например, на верхушке зубчика пилы, то есть когда генератор частоты дал 1. И вот совремменные процессоры делают это с частотой 2 гигагерца, то есть 2 миллиарда раз в секунду все транзисторы в процессоре меняют своё состояние.

    P.S. Я сделал небольшое допущение. На самом деле в правом ухе не 1 и 0, а точно такое же напряжение, которое ты подал на левое ухо, если транзистор включён, либо никакого, если выключен. Но чаще всего это потсоянный небольшой ток. Благодаря уровню необходимого питания на ртах у транзисторов, этот небольшой ток может быть либо меньше необходимого (0), либо больше, при котором транзистор включается(1). Это всё зависит от того, из чего сделан транзистор. Это уже химия, дружок. Сплавы всякие, металлов. Они ещё полупроводники называются, потому что до конца не определились, готовы они всегда пропускать ток, или никогда. Этим тохитрые людишки и воспользовались, заставляя полупроводники менять своё настроение и позволять тебе играть в майнкрафт.
    Ответ написан