• Высоконагруженный проект. Стоит ли переехать с PHP на NodeJS? Или может на что нить ещё?

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

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Технически кука - это заголовок вида "Cookie: mycookie=12345".
    Так что дело вкуса, никаких особых преимуществ нет.
    Единственное что могу предположить - если API передает какие-то данные в куках (это очень, очень плохой дизайн) - то наверное может быть удобно разделить авторизацию от данных.
    Ответ написан
    Комментировать
  • Нотификации в cordova?

    mrhard
    @mrhard
    web разработчик
    Phonegap-plugin-push
    Cordova-fmc-messages
    Cordola-plugin-local-notification
    Все на плагинах, но нюансов очень много
    Ответ написан
    3 комментария
  • Laravel не отображает кастомную страницу ошибки?

    vanyahuk
    @vanyahuk
    Попробуйте /storage/log поставить права на запись, у меня такая же проблема вчера была
    Ответ написан
    Комментировать
  • Пара вопросов об SPA?

    YarkoDzech
    @YarkoDzech
    будучи трезвым, сдержи все свои пьяные обещания!
    1. В vue пока нет стандарта паттернов, но если по уму, то у приложения всегда должен быть один главный компонент. Компонентный подход ввобще очень гибкий и удобный. Для разных страниц (компонент) используйте роутер.
    Для состояния есть vuex или тот же хайповый redux

    2. Не совсем понятно кто что и кому отдает. У вас статику с сервера отдает ларка? Начиная с 2.3.3 прямо с коробки начал работать ssr (сервер сайд рендеринг), но там аккуратней присутствуют не все хуки жизненного цикла.
    Ответ написан
    Комментировать
  • Библиотека для фронтенд?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Перешел с Backbone на Vue. Да, она офигенная.
    Ответ написан
    Комментировать
  • Библиотека для фронтенд?

    @D3lphi
    Ну, во-первых, не "ву", а "вью" (Читается также, как и view). Во-вторых, vue - это фреймворк, а не библиотека. А в-третьих, да vue хорош. В последнее время он активно набирает популярность. Во многом, из-за своей простоты и "легковесности".
    Ответ написан
    1 комментарий
  • Как вы делаете бэкапы?

    SSar
    @SSar
    База примерно такого же размера как и у вас, и те же проблемы были в прошлом, посему сделали следующее:
    1. Перешли на Percona (форк MySQL) наиболее быстрый из наших тестов среди форков.
    2. Использовали ее фирменный и легковесный Percona XtraBackup который практически не тормозит базу и бесплатен:
    https://www.percona.com/software/mysql-database/pe...
    Если же у вас проблемы с местом на хостинге, ну т.е. нет у вас еще 16-20 гиг в заначке под файлы бэкапа, то тут уже по cron писать свои SQL скрипты для больших таблиц и бэкапить их по частям (к примеру по UnixTime индексного поля) на удаленный ftp или через nfs.
    Ответ написан
    Комментировать
  • Как вы делаете бэкапы?

    @dady_KK
    PM
    Мы делаем аналогично, но у нас на проектах очень маленькие базы. А Вам бы я посоветовал настроить репликацию мастер-слейв и делать бекап со слейва, в инете много туториалов на эту тему. Это должно решить вопрос с доступностью сайта + всегда можно дамп сжимать ганзипом и проверять после этого архив, а лучше делать распаковку и импорт в тестовую базу и следить за возникновением ошибок во время этого.
    Ответ написан
    2 комментария
  • Как это реализовано в Laravel?

    @D3lphi
    Это называется рефлексия. Пример:
    $class = new \ReflectionClass('Название класса');  // Создаем объект для рефлексии класса
    $method = $class->getMethod('Имя метода');   // Получаем метод по имени
    $params = $method->getParameters();   // Получаем массив с параметрами
    $paramName = $params[0]->getName();   // Берем первый элемент массива, он имеет тип ReflectionParameter, и получаем его имя.

    Можно сразу создать объект для рефлексии метода "напрямую":
    $method = new \ReflectionMethod('Класс', 'Имя метода');
    // Далее, аналогично

    С помощью рефлексии можно не только получать имена параметров, но и их типы, значения по умолчанию. Можно получать даже док-блоки для методов/свойств и тд. С помощью рефлексии, например, работает doctrine orm. Он использует аннотации (как один из вариантов конфигурации) для описания сущностей.
    Ответ написан
    Комментировать
  • Как отслеживается посещаемость чужих сайтов?

    VasyaPertrov
    @VasyaPertrov
    Изготовление и безопастность сайтов. WP и др.
    Каким образом разные сервисы, типа alexa.com отслеживают посещаемость на других сайтах?

    Через скрипты на сайтах, аддоны к браузерам и пр стучалках в ПО и девайсах.

    Что если я на своем сайте не устанавливал никаких счетчиков?

    Но установил гуглошрифты, виждеты фесбуков, рекламу и тп, угу? :)
    Может даже не специально, а с каким-нить шаблоном.
    Ответ написан
    3 комментария
  • Как добавить иконку ну рабочий стол ubuntu?

    slo_nik
    @slo_nik
    Добрый день.
    1) Открываете dash
    2) Находите phpstorm
    3) Запускаете
    4) Появляется значок в панели запуска.
    Значок останется в панели запуска. Если после завершения работы phpstorm значок исчезнет из панели запуска, то запустите заново, затем правой кнопкой -> закрепить.
    Всё.
    Ответ написан
    2 комментария
  • Неудобство при мягком удалении laravel?

    DJZT
    @DJZT
    Laravel - code for you
    Делал в обработчике события на deleted на модели выборку необходимых связанных моделей и тоже делал им удаление.
    Ответ написан
    Комментировать
  • Безопасность банковских карт?

    Jump
    @Jump
    Системный администратор со стажем.
    3d secure включено практически на всех картах у нас.
    Однако некоторые магазины могут провести платеж, и без подтверждения через смс, даже при включенном 3ds.
    Но такое позволено далеко не всем магазинам - мелкому ларьку такое сделать не позволят, только очень крупным конторам, у кого репутация и солидный баланс. Любой платеж совершенный без 3ds вы можете оспорить.

    По факту - номер карты можно светить направо и налево. Это безопасно.
    Если кто увидит CSV - тут уже можно воспользоваться вашей картой.
    Однако деньги вы не потеряете - такие фокусы без проблем можно оспорить, и деньги вернут.
    Правда дело это не быстрое, не стоит рассчитывать что вернут их через пять минут, обычно пара месяцев.

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

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

    Просто надо понимать что карта это не место для хранения денег, а инструмент для расчетов.
    Хранить крупные суммы надо на банковском счету.
    А на карте должны быть деньги на текущие расходы.
    Так же нужно иметь более одной карты - очень неприятно когда у вас все деньги на одной карте, а у банка зависает система, или неисправный банкомат зажевывает вашу карту, или ее блокируют по какой-то причине.
    Ответ написан
    Комментировать
  • Безопасность банковских карт?

    @miksir
    IT
    1) На некоторых интернет магазинах не требуется никакого подтверждения смс кодом или еще как-то.

    1) Так называемое 3ds (подверждение смс) - способ защиты мерчанта от фрода. В случае вашего несогласия с платежом (опротестование через банк) при отключенном 3ds - убыток несет мерчант. Если мерчант поддерживает 3ds - ответственность перекладыватся на владельца карты. Т.е. если у вас увели данные карты и купили через 3дс - у вас хороший шанс опротестовать и получить деньги назад (хоть это и займет много времени). Если 3дс был (у вас увели телефон или посадили вирус или как-то узнали код) - вернуть ничего не получится. Почему не все мерчанты поддерживают 3дс? Ну, например почитайте https://habrahabr.ru/company/badoo/blog/234677/ - там есть цифры, как 3дс уменьшало продажи.

    Вопрос: что можно сделать с картой, имея лишь ее номер и зачем, если это небезопасно, банки выбивают номер на самом видном месте?

    2) Сейчас почти ничего, мест, где можно провести операцию только по номеру карты без какой-то дополнительной верификации - почти не осталось. Я бы не стал светить номер карты везде в интернете, но и скрывать номер от друзей/начальника и т.п. смысла нет. А вот CVV код (на обратной стороне) стоит спрятать (лучше всего переписать и затереть нафиг). Опять же, если уведут номер карты + cvv - скорее всего такие платежи можно будет опротестовать, но нафига вам лишний гимор.

    общем все это выглядит очень небезопасно и я стараюсь не хранить большие суммы на карте.

    Угроз много, опротестование занимает время, банки не особо охотно это делают и т.п. Так что держать сумму, которую не сильно обидно потерять - самое оптимальное. И подкидывать туда деньги с другого счета через интернет-банк по мере необходимости.
    Ответ написан
    Комментировать
  • Как сделать плавное затухание эффекта css?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Если стоит transition, то тень и появляется и пропадает одинаково.
    https://jsfiddle.net/webirus/2anrrtgu/
    А если у вас не так, покажите пример с косяком.
    Ответ написан
    1 комментарий
  • Не открывается сайт после подключения https?

    AxianLTD
    @AxianLTD
    А на Амазоне к инстансу открыли доступ по https?
    Ответ написан
    1 комментарий
  • Несколько вопросов о mongodb?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Я работаю с MongoDB уже более 3 лет, поэтому буду рассказывать и давать советы опираясь на личный опыт эксплуатации.

    Получается, что нас всю жизнь учили данные нормализовывать и объясняли, почему это хорошо, а теперь все с точностью наоборот?

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

    Объясните, пожалуйста, на пальцах, правильно ли я все понимаю?

    По большей части вы правы. Это денормализованные данные, но с определенными моментами. Я покажу вам их на вашем же примере.

    Как в монго при этом обновлять данные, которые хранятся в каждом документе?


    Это реализуется с помощью банальных обновлений.
    Например, если у меня есть коллекция с книгами, в которой мне нужно обновить авторов.

    Типичная запись в ней выглядит так
    {
        "_id" : ObjectId("5801aa17964c6b2a050041a7"),
        "title" : "New Book",
        "authors" : [ 
            {
                "_id" : ObjectId("5801aa0f964c6b26030041a9"),
                "firstName" : "Phil",
                "lastName" : "Tkachev"
            }
        ]
    }


    И я хочу заменить имя в тех книгах, в которых я - автор, то мой запрос будет выглядеть так:

    db.getCollection('book').update(
     {'authors._id':ObjectId("5801aa0f964c6b26030041a9")}, 
     {$set: {'authors.$.firstName': 'Philipp'}  }, 
     {multi: true } 
    )


    Здесь есть ряд разных сценариев, просто почитайте документацию. В ней все неплохо расписано.

    Приемлемо ли в монго денормализовывать данные, чтобы хранить данные в отдельной коллекции, и обращаться к ним отдельным запросом (ведь джоинов там нет)?


    Есть ряд случаев, когда так и делают. Например есть разного рода ORM, тот же Mongoose, который так и делает.

    И принято ли так работать?


    И да, и нет. Когда вы работаете с такого рода базой данных, вам нужно подходить к организации данных исходя из решаемой проблемы, отталкиваться от проекта будущего приложения или решения задачи.
    Вам просто нужно ответить на вопрос, что дешевле, запросить документ по ключу или обновить запись внутри документов.
    Взять к примеру, ваш сайт, в котором есть новости и их авторы. Новости могут читать миллионы, а значит при обращении к каждой новости нужно будет делать подзапрос на информацию о каждом авторе. Т.е. вместо одного запроса, при просмотре новости, нужно будет делать 2. А если показывать список из 100 новостей? Будете делать 100 вторичных запросов? Нет, это тоже неправильно. Нужно будет получить список новостей, в коде приложения собрать идентификаторы авторов, сделать второй подзапрос, получить информацию об авторах, затем объединить ее с уже полученным списком статей. Это немного усложнит ваше приложение, но тоже позволит сэкономить ресурсы. Если вы встроите авторов внутрь статьи, это позволит вам обойтись одним запросом к базе, хоть на просмотр, хоть на список новостей. С другой стороны вам прийдется подумать об обновлении информации об авторе. Но, т.к. такая информация меняется сравнительно редко, то есть смысл встраивания.

    Что делать, если изменилась структура данных, если структуры то и нет?


    Здесь все просто. Когда вы разрабатываете свое приложение, вы изначально закладываете в него обработку изменений. Например, вы можете добавить поле версии документа, в котором храните номер версии структуры и реагировать на ее изменение в коде. Либо вы можете просто писать приложение таким образом, что оно автоматически будет конвертировать структуру из старой в новую при первом обращении.

    По дизайну вашего приложения.
    Судя по первичным данным, у вас новостной сайт.
    Логично было бы его представить в следующем виде.

    Коллекция новостей:

    {
    	_id: 'MongoId',
    	title: '',
    	body: '',
    	author: {
    		_id: 'идентификатор пользователя',
    		name: 'Имя пользователя',
    		subscribers: 'Количество подписчиков'
    	}
    }


    Автор является неполной копией данных о пользователе. Это поможет сэкономить место и позволит избежать ненужных запросов.

    Коллекция пользователей:

    {
    	_id: 'MongoId',
    	name: 'Имя пользователя',
    	email: '',
    	roles: ['user', 'author', 'admin'],
    	subscribers: 'Number'
    }


    Список ролей может опеределять уровень доступных возможностей. Его легко изменить, можно легко найти авторов или админов.

    Коллекция подписок:

    {
    	initiator: {
    		_id: 'идентификатор пользователя, который инициировал подписку',
    		name: 'Имя пользователя'
    	},
    	target: {
    		_id: 'идентификатор автора',
    		name: 'Имя пользователя'
    	},
    	date: 'ISODate',
    	confirmed: 'bool'
    }


    Здесь вы можете подстроить, как список подписок, так и список подписчиков одним запросом.
    Ответ написан
    1 комментарий