• Почему не срабатывает react-router onEnter у родительского компонента после редиректа?

    devellopah
    @devellopah
    попробуй поменять
    <Route path="/" component={App} onEnter={App.onEnter}>

    на
    <Route path="/" component={App} >

    а .onEnter() вызвать в componentDidMount() контейнера
    Ответ написан
    1 комментарий
  • Как настроить динамический роутинг дочерних компонентов в react-router?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Не вижу проблемы..
    <Route path={"/rooms/:chatroomId"} component={ChatBox} />

    В коде Rooms - стандартно - this.props.children, так как ChatBox является потомком...

    p.s. или вы что-то иное хотели спросить?
    Ответ написан
    3 комментария
  • Где почитать про проектирование баз данных(nosql) с практическими примерами?

    используя nosql-базы

    Шаг 1. Убрать из лексикона термин "NoSQL". Хотя бы временно.
    как наиболее правильно хранить пользовательские данные, комментарии, лайки, медиа-данные.

    Шаг 2. Выписать или запомнить три важнейших свойства любой СУБД:
    • модель данных: что является элементом данных, что является коллекцией элементов, чего в СУБД должно быть постоянное количество, есть ли схема и в каком виде, как обеспечиваются связи между элементами данных на уровне модели;
      Пример: MongoDB, элемент данных - документ, описывается как JSON-документ с некоторыми специфичными для Монги расширениями. Коллекция элементов - коллекция документов. Количество коллекций более-менее постоянное, количество документов растёт.
    • ограничения и гарантии физической реализации модели данных - какие операции какую сложность имеют, какую цену (в плане пространства на устройстве хранения и процессорного времени) имеет каждая используемая структура данных или алгоритм; какие параметры как будут расти во время эксплуатации БД.
      Пример: графовые БД, имеющие "настоящий" графовый движок, т.е. такой, который хранит физические ссылки из одной вершины на другую, гарантируют константное время выборки связанных вершин. В связи с этим их выгодно использовать для сильносвязанных нечасто изменяющихся данных (графы друзей в социалочках и т.п.)
    • инструментарий логического и физического уровня: по сути это предыдущие пункты более подробно - какие структуры данных доступны, в частности какие есть индексы, какие способы выборки/фильтрации/сортировки присутствуют; для чего гарантируется транзакционность (особо важный вопрос); где находится база в CAP диаграмме; какие есть средства логического уровня, например представления (view);
    Вспомните любую социальную сеть, где над каждым постом есть куча комментариев, лайков, репостов

    Шаг 3. Научиться ставить задачу с точки зрения обрабатываемых данных:
    • какие данные будут иметь постоянный объем или расти медленно, а какие - быстро и постоянно;
    • какие будут запросы к данным, что будет выбираться как есть, а что нужно будет дополнительно агрегировать;
    • какие запросы будут плановые, а какие придётся выполнять внепланово;
    • какой нужен уровень доступности, какова ценность хранящихся данных и цена простоя.

    Шаг 4. Ознакамливаться с СУБД здесь: nosql-database.org и выбирать нужную с учётом:
    • вашей задачи;
    • порога вхождения;
    • наличия доступных специалистов.
    Ответ написан
    2 комментария
  • С чего начать изучение PHP7 для middle-level JavaScript-девелопера?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет, в твоем случае, все что тебе нужно можешь подтянуть за 1 день
    1) Ищешь любую вводную по php ~ 2 часа (синтаксис, сессии, куки)
    2) Изучаешь какую-нибудь простенькую ORM, например Idiorm ~ 2 часа (работа с бд)
    3.а) Изучаешь любой популярный мини-фреймворк: Lumen, Silex (mvc, авторизация и т.д.) ~ 6 часов
    3.b) Если в основном пишешь сервисами, то можно даже упростить, взяв микро-фреймворк, например: Flight PHP ~ 1 час

    ** за это время ты не станешь супер-профи в php, но это даст общую картину и позволит сразу начать делать любые мини-проекты.
    Ответ написан
    Комментировать
  • С чего начать изучение PHP7 для middle-level JavaScript-девелопера?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    Ответ написан
    Комментировать
  • Правильно ли я понял, как работает токен?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да. Все верно.

    Единственное что добавлю, пересылать токен лучше в заголовках. Причем желательно, поскольку механизм аутентификации нестандартный, в заголовке X-Authorization. Если вы решите хранить токен в куках и передавать его, это желательно должны быть http-only куки (хотя в случае JWT не обязательно) и на сервере должна быть защита от CSRF атак.

    Так же поскольку у нас по сети гуляют по сути креденшелы, важно использовать SSL. Благо сегодня есть lets-encrypt что бы бесплатно получить сертификаты.

    И последнее, что бы обезопасить себя еще, используйте refresh-токены. То есть наш уникальный токен который гуляет в каждом запросе будет иметь ограничение по времени жизни (скажем 5 минут) и для его обновления мы будем использовать refresh-токен. При получении refresh токена клиенту уходит новая пара токен + refresh-токен.

    Таким образом у злоумышленника который перехватил токен пользователя будет окно всего в 5 минут что бы что-то сделать.
    Ответ написан
    13 комментариев
  • Как правильно перейти с http на https протокол?

    Убедитесь что весь контент, который вы используете (картинки, стили, баннеры, внешние скрипты) прописан без указания протоколов, т.е. не src="http://example.com..." а src="//example.com" или по относительным путям. Настройте SSL, потом поднимите прокси и "прокликайте" свой сайт через прокси. Убедитесь по логам прокси, что нет обращений по http:// и что в браузере не вылазит сообщений о небезопасном содержимом.
    Ответ написан
    7 комментариев
  • Можно ли заменить input[type=range] полнофункциональный слайдер-ползунок для Веб-Плеера?

    wielski
    @wielski
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Можно.
    При включенном видео программно изменять значение для индикацией просмотренного.
    Индикацию загруженного можно реализовать с помощью фонового изображения, после чего менять background-size
    var percent = 35;
    var h = $('.ползунок').height();
    var h = h * percent / 100;
    $('.ползунок').css('background-size', '100% ' + percent + 'px');


    Но спросите себя - оно вам надо? :)
    Не легче все сделать дивами, навесив нужные классы и стили, и прикрутив несколько эвентов к элементу "ползунка"?
    Ответ написан
    1 комментарий
  • Как асинхронно запарсить данные из папки в JSON, используя node.js?

    @netW0rm
    var cache = {};
    function writeJson() {
    	fs.writeFile(JSON.stringify(cache), cb)
    }
    fs.readdir(__dirname, function(err, data) { // Читаем текущую директорию
        if (err) throw err; // Обработали ошибку, если есть
        var promises = []
        data.forEach(function(item) { // Для каждой папки в директории начинаем перебор
            promises.push(new Promise((resolve, reject) => {
              if (isFolder(item)) { // Если это - папка, то продолжаем
                  cache[item] = {}; // Наименование папки(муз.альбом) - объект, кот. будет хранить данные о нем
    
                  fs.readdir(__dirname + `/${item}`, function(err, songList) { // Читаем внутренности папки(альбома)
                      let songArray = [], // Найденные песни копим сюда
                          cover = null; // Контейнер для кавера для альбома
                      if (err) throw err;
                      songList.forEach(function(song) { // Для каждой песни в альбоме
                          if (isSong(song)) { // Если это - песня, а не фотография или еще чего, то добавляем в массив
                              songArray.push(song);
                          } else if (isPic(song)) { // Если фотография - присваиваем её переменной
                              cover = song;
                          }
                      }); // Цикл перебора для текущей папки(альбома) закончен, запускается следующий
                      cache[item] = { // Тут мы присваиваем данные объекту(item-название альбома)
                          songs: songArray, // Массив с песнями
                          cover: cover // Кавер для альбома
                      };
                      resolve()
                  });
              }
              else {
              	resolve()
              }
            });
        });
        Promise.all(promises).then(() => {
        	writeJson()
        })
    });

    както так
    Ответ написан
    6 комментариев
  • В какую сторону приведет развитие asm.js / Native Client?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    c320f459db12436aa2acaca211b886ba.jpg
    Куда приведет - я знаю, и поэтому я уже пишу на нём.
    Сложно ли? - очень высокий входной порог и надо знать много до начала работ.
    Стоит ли? - однозначное ДА.
    Профит? - любая тематика, целевая платформа, большие деньги (т.к. это большое преимущество на сегодня на рынке) и...
    САМОЕ ВАЖНОЕ - очень быстрый результат: готовое рабочее решение.

    Что могу сказать: ДА, будущее за JS и, скорее всего, его "спустят" на уровень инструкций CPU. Т.е. сейчас идёт "проба пера" и далее, уже достигнув полного понимания необходимой архитектуры, сразу же начнётся внедрение в "железо".

    Webkit(node.js included)/PhoneGap+ASM.js => фактически единая кросс-платформенная среда самой быстрой разработки для развлекательно-контентных, мультимедийных и игровых Web-приложений с полным спектром возможностей "тонких" клиентов на сегодняшний день.
    Ответ написан
    9 комментариев
  • Как прикрутить оплату на сайт, используя node.js, с нуля?

    @redakoc
    1. Сначала выбрать того, кто предоставляет услуги по оплате (платежную систему). Возможно несколько разных сразу.
    2. Читать их документацию по API.
    3. Заключить с ними договор (возможно это делается в бумажном виде, а возможно достаточно просто зарегистрироваться у них на сайте).
    4. Реализовывать по документации. Там все подробно описано.
    5. Для распространенных, очень может быть, что есть и готовые решения, которые нужно будет просто подпилить под себя.
    Ответ написан
    9 комментариев
  • Адаптивная верстка макета шириной 1600px, используя bootstrap. Как быть с размерами?

    CheapThailand
    @CheapThailand
    учусь путешествовать
    Присоединяюсь к предыдущему Сергею..)
    Более конкретно: идёшь по ссылке: getbootstrap.com/customize/#container-sizes
    Задаешь нужные тебе размеры: вместо 1140+30 (30 - это межколонник, кстати который ты тоже можешь изменить чуть выше на странице) вводишь соответсвенно 1570px (это как раз 1600px-30px).
    Далее внизу страницы нажимаешь СКОМПИЛИРОВАТЬ И СКАЧАТЬ. Получаешь нужную тебе сетку бутстрапа. Переименовываешь её например в bootstrap1600.css и используешь для своего сайта. Всё!
    Ответ написан
    3 комментария
  • Как начать использовать технологию WebSocket?

    winbackgo
    @winbackgo
    Не знаю как там ratchet но поднять вменяемый socket server на php мне так и не удалось. Перешел на javascript (node.js). Доволен. Использую socket.io и socketcluster.io. Еще есть lightstreamer (java), мощная штука, все из коробки, но бесплатная версия имеет ряд ограничений.
    Ответ написан
    1 комментарий
  • Wordpress: как убрать /?ver=... в пути файла?

    llgruff
    @llgruff
    Scala
    github gist
    Удаление версии из ссылок на скрипты и стили:
    function wp_version_js_css($src) {
        if (strpos($src, 'ver='))
        $src = remove_query_arg('ver', $src);
        return $src;
    }
    add_filter('style_loader_src', 'wp_version_js_css', 9999);
    add_filter('script_loader_src', 'wp_version_js_css', 9999);
    Ответ написан
    5 комментариев
  • Python httplib2: почему не корректо работают куки после процесса аутентификации?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    "купил Ниссан - ..сь с ним сам"

    реквестс бы никогда не было, если бы httplib работал из коробки,
    причем реквестс ставится поверх очень легко, в сравнении с тем же cURL

    ну а если хочется так уж перфекционизма - зарабатывайте, смотрите fiddleroм, читайте

    stackoverflow.com/questions/7340818/python-3-httpl...
    stackoverflow.com/questions/2296654/python-regex-h...
    stackoverflow.com/questions/1738227/httplib2-how-t...
    Ответ написан
    1 комментарий
  • Можно ли написать вирус на JavaScript?

    Разумеется никому не нужен браузер, который вам позволит, не спрашивая пользователя, сделать на его машине что-либо серьезное. Фактически, в браузере и API-то толком нет, чтобы, допустим, файловую систему шерстить. Оно там и не нужно, веб-приложение на то и веб, что большинство данных берет с сервера, в отличие от приложения десктопного.
    Другое дело, что в браузере можно искать уязвимости, и пытаться их эксплуатировать, но "на чем" будет написан ваш вирус в таком случае - вопрос конкретной уязвимости. Если это будет удаленное выполнение кода, то на js вы скорее всего напишете лишь непосредственно эксплоит, а полезная нагрузка уже должна быть в нативном коде платформы жертвы.
    Писать обыкновенные вирусы на языках вроде C/C++/C# можно потому, что они исполняются как процессы операционной системы, и имеют доступ либо к нативному API, либо к API некоей плафтормы, такой как .NET. А эти API имеют достаточно средств для доступа к системе - достаточно лишь заставить жертву запустить тело вируса и, возможно, дать повышенные привелегии (хотя тем же шифровальщикам повышенные привелегии совсем не нужны - им ничто не мешает перезаписывать несистемные (пользовательские) файлы и вымогать деньги за дешифратор). В браузере таких средств нет. Если они и появятся, то тогда наверняка будет какой-либо механизм четкого разграничения доступа.
    Максимум что можно сделать, как сказал Itvanya - завалить движок js хламом (навыделять памяти, запилить кучу таймеров), с контролем съедаемых ресурсов сейчас у браузеров плоховато.
    Ответ написан
    Комментировать
  • Где водятся специалисты JavaScript?

    mr_T
    @mr_T
    Web-разработчик
    index0h: Нельзя "знать node.js". Это как сказать, что я знаю не Java, а JVM или не C#, а .NET.

    Знать надо JavaScript, а в случае с Node.js нужно дополнительно иметь представление об архитектуре серверных приложений (хотя Node.js это не только сервер, а по сути возможность писать на JS вообще все что душе угодно) и о том, какие задачи можно решить модулями npm. Вернее даже не знать, а уметь гуглить и понимать английский.

    Но проблема в том, что на хорошем уровне JS знает со значительно большей вероятностью фронтендщик, чем бэкендщик. Отсюда проблема поиска: чтобы писать серверное приложение на Node.js - это либо фронтендщик начинает осваивать сервер, что, безусловно, похвально, но требует понимания многих вещей, с которыми человек ранее не сталкивался, либо бэкендщик начинает осваивать JavaScript, для которого, скорее всего, в новинку событийный подход и другие моменты из мира JavaScript который, как известно, во многом сильно отличается от классических языков с поддержкой ООП. Это я еще не упомянул тот факт, что Node.js появился сравнительно недавно, и специалистов по нему чисто физически не может быть очень много.

    Еще один момент. Программисты изучают то, что приносит деньги, то есть то, что более-менее востребовано. Компании, в свою очередь, стараются использовать технологии, для которых легко найти специалиста (привет, 1С-Битрикс). В итоге замкнуый круг, который потихоньку, конечно, разомкнется, но нужно время.

    Итого: дефицит специалистов, которые бы умели все, что необходимо. К тому же ты хочешь получить и фронт, и бэк в одном флаконе, что еще больше усложняет поиск.
    Ответ написан
    1 комментарий
  • Замыкания внутри циклов в JavaScript. Какова механика работы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    в курсе сюрпризов JavaScript относительно замыкание внутри closures.

    Если для вас это все еще сюрпризы - рекомендую перештудировать какой-нибудь туториал или документацию. В JS все как-будто асинхронно, на самом деле там просто есть event loop.

    Давайте разберемся на примере:

    for(var i = 0; i < 10; i++) {
        setTimeout(function() {
            console.log(i);
        }, 1000);
    }

    Что у нас тут будет происходить. Мы берем цикл и 10 раз создаем отложенный вызов. Что при этом происходит... давайте представим себе что в JS все разбито на кадры. Цикл - один кадр, и пока он не отработает, какой бы он длинный не был - новый кадр так же не отработает. setTimeout не просто выполняет код с задержкой, через 1000 милисекунд в event loop будет добавлен очередной кадр. И любой "асинхронный" вызов так же просто добавляет кадр в event loop. Внутри же event loop все выполняется синхронно и по порядку.

    Так вот, на момент, когда закончит выполнение кадр с циклом, значение i уже будет установлено в 9. А как мы выяснили ранее, JS ничего более не будет выполнять до этого момента. Посему отложенный код выведет нам одно и то же значение так как все они ссылаются на одну и ту же переменную.

    Теперь, что происходит тут:
    for(var i = 0; i < 10; i++) {
        (function(e) {
            setTimeout(function() {
                console.log(e);
            }, 1000);
        })(i);
    }


    Да собственно то же самое. Только за счет того что мы при публикации setTimeout используем замыкание и передаем i в качестве аргумента, срабатывает механизм называемый copy-on-write. То есть в замыкании не i а его копия (когда цикл перезаписывает значение i - все кто ссылался на это значение не по ссылке, копируют себе переменную, для простоты можно просто думать что каждый раз когда вы передаете что-то не по ссылке, происходит копирование).

    Так как у каждого кадра, выполняемого в setTimeout есть своя копия i с нужным значением - все будет хорошо.
    Ответ написан
    2 комментария
  • Как правильно начать изучение django?

    alxpy
    @alxpy
    Я бы посоветовал учить дальше в такой последовательности:
    Питон: Читая Лутца, можно состариться ;-) Для начала прочтите Укус Питона и Погружение в Python 3 (да, учите сразу 3й питон). Лутца и потом можно полистать, по мере необходимости.
    Джанго: Документация: en | ru | форумы
    БД: Для старта вам хватит просто познакомиться с SQL и пройти уроки.
    Дополнительно:
    Прочитайте про такие уязвимости: XSS, CSRF, SQL injection и т.д.
    Еще гляньте flask (можете даже начать с него, а не с джанго) и tornado.
    Ответ написан
    Комментировать