Задать вопрос
  • Как транслитерировать символы в JavaScript или PHP?

    AngReload
    @AngReload
    Кратко о себе
    https://github.com/andyhu/transliteration
    Подойдёт?
    Там правда символы болгарского транслируются как русский язык: https://github.com/andyhu/transliteration/issues/56
    Ответ написан
    2 комментария
  • Можно ли использовать mixin в разных компонентах vue?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Если в одном компоненте произойдет ошибка, будет ли это видно в другом?

    Если нет, то подскажите, как...

    vuex

    Переносите errorOnUpdate в хранилище, а в миксине делаете computed свойство, достающее errorOnUpdate и метод, который будет дёргать мутацию, меняющую значение errorOnUpdate (или просто заменяете присваивание вызовом мутации в методе update, тут вам виднее).
    Ответ написан
    Комментировать
  • Как использовать Vue.set в mixins?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Замените

    const Vue = require('vue');

    на

    const Vue = require('vue').default;
    Ответ написан
    2 комментария
  • Самый простой способ анимировать появление элемента?

    @boga-net
    Самый простой в таком случае будет

    $(".shadow").hide(1000); // Скрыть
    $(".shadow").show('slow'); // Показать


    $("shadow").hide();
    Показать - show()
    Плавно изменит прозрачность и скроет элемент

    .shadow {
       animation: animElem 1s both;
    }
    
    @keyframes animElem {
      99% {
        opacity: 0;
        transform: translateX(0);
      }
      100% {
        transform: translateX(-100%) ;
      }
    }

    CSS :

    // 1s - время длительности анимации.
    Сначала спрячет, потом уберёт подальше
    Ответ написан
    Комментировать
  • Как во vue обрабатывать данные в цикле?

    Konstantin18ko
    @Konstantin18ko
    Стоматолог
    Через фильтр.
    {{user.created_at | getCreatedYear}}

    Vue.filter('getCreatedYear', function (value) {
    return // тут ваш метод
    })
    Ответ написан
    Комментировать
  • Как изменить набор слайдов в vue-slick?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Использую карусель vue-slick...

    Я так понимаю, вы говорите про эту?

    Есть кнопка "добавить слайд", после которой нужно "перезапустить" слайдер. <...> Пробую использовать в методе добавления слайда this.$refs.slick.$reSlick(), ничего не получается.

    Что неудивительно - внутри reSlick карусель уничтожается и сразу же создаётся. При уничтожении вся внутренняя разметка кроме картинок вырезается, сами же картинки slick держит в отдельном div'е - то есть, только что добавленный слайд попадает в корневой элемент slick'a и сразу же удаляется.

    Так что порядок действий при изменении набора слайдов должен выглядеть как-то так - уничтожить карусель, изменить разметку, создать карусель. То есть, вызов $refs.slick.destroy; затем изменение данных, на основе которых строится разметка слайдов; и наконец, вызов $refs.slick.create, обёрнутый в $nextTick.

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

    Moskus
    @Moskus
    Открываются, как относительные, потому что они и записаны, как относительные (согласно синтаксису URI):
    https://en.wikipedia.org/wiki/Uniform_Resource_Ide...
    Только наличие в URL символов // позволяет однозначно определить, является ли то, что идет после них, адресом хоста. Потому что у вас на сайте foobar.com может быть подкаталог yandex.ru, и относительная ссылка на этот каталог с главной страницы будет в коде выглядеть как <a href="yandex.ru">xxx</a>. А чтобы перейти действительно на сайт Яндекса, вам нужно писать либо полностью с протоколом https://yandex.ru, либо без протокола, но //yandex.ru.
    Это - способ разрешения неоднозначности.
    Ответ написан
    Комментировать
  • Почему пуст HTTP_REFERER?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    https://www.e-nor.com/blog/google-analytics/https-...

    ba9db21712db193f07f4d44359ae.png

    По дефолту такая обработка.
    Так же можно опционально запрещать разрешать передавать реферер или делать кучу редиректов чтобы реферер терялся.
    В общем он далеко не всегда есть и зависит это от того сайта с которого переход был в большей степени.
    Ответ написан
    2 комментария
  • Как исправить простую анимацию CSS?

    warsand
    @warsand
    Экспериментатор
    Способы анимации:
    animation: animation linear 1s 0s infinite;
     /* linear | ease-in | ease-out | ease-in-out | cubic-bezier(x1,x2,x3,x4) */
    Взял отсюда
    Ответ написан
    Комментировать
  • Linux flock при завершении процесса?

    Если процесс убить lock спадёт. Можно убивать процесс, если вам надо.
    Ответ написан
    Комментировать
  • Почему скрипт из браузера нагружает сервер, а из консоли нет?

    DevMan
    @DevMan
    1. консольный пых и пых через веб-сервер - это разные пыхи.
    2. в отличие от пыха через веб-сервер у консольного нет лимитов по времени, поэтому и нет таймаутов.
    Ответ написан
    2 комментария
  • Как проверить существование класса?

    @MadridianFox
    Web-программист, многостаночник
    1) это где такие лабораторные дают, что необходимо фреймворк написать?))
    2) а вы уверены, что вам нужна рефлексия и динамика вообще? Почему вы считаете, что использование неймспейсов это проблема?

    По PSR-4 неймспейсы как раз используются для автозагрузки классов, потому что неймспейс по сути должен повторять путь до класса. У вас какой-то не универсальный автолоад, как же файлы в других папках? Как вы будете подгружать классы из папок внутри папки controllers?
    Правильный подход - получать полное имя класса (с неймспейсом) и при автолоаде просто заменять слэши на прямые, чтобы получить путь до файла.

    Свой автолоад это обязательное условие? можно просто воспользоваться композером. Обязательно автолоад делать через устаревший __autoload(), а не через общепринятый spl_autoload_register()?

    Создать объект класса используя его название в строке можно просто используя переменную:
    $classname = "app\\controllers\\MainController";
    $methodname = "actionIndex";
    $controller = new $classname(); // тут сработает автолоад
    
    $controller->{$methodname}();


    При этом вы можете (и должны) обеспечить безопасность, так чтобы никто не мог передать через GET и имя класса и имя метода, и вызвать любой метод. Делается это очень легко.
    Во-первых путь из GET к нам приходит имя класса без неймспейса, ну логично. Неймспейс мы потом прицепим к нему. Так никто не сможет случайно создать объект любого класса, а только объект класса из папки с контроллером. Это не возбраняется.
    Во-вторых, если кто-то передал абра-кадабру, то надо не падать с ошибкой Class not found, логично. Для этого, перед созданием класса просто смотрим на то какие файлы есть в папке с контроллерами. Если там нет файла с тами же именем что и класс - то показываем 404.

    Потом, перед тем как вызвать метод, проверяем что он существует функцией method_exists($obj, $method_name), опять же - метода нет -- идите-ка вы на 404.

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

    Wolfnsex
    @Wolfnsex Куратор тега HTML
    Если не хочешь быть первым - не вставай в очередь!
    Как вы работаете с свг?

    Вариантов тут два:
    1. Терпеть "как есть"
    2. Вставлять файлы через какой-нибудь шаблонизатор или с помощью языка/интерпретатора, который с этими функциями справляется, например как-то так:
    <?= file_get_content(__FILE__.'/img/svg/image1.svg'); ?>
    *пример исключительно условный.
    Ответ написан
    Комментировать
  • Можно ли использовать такую структуру таблиц?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Здравствуйте.
    В проекте есть таблица posts - это таблица с постами из разных социальных сетей.


    Здравствуйте. С учётом того, что в тегах Вы указали MySQL, подозреваю, что используете Вы именно эту БД... А у этой БД (как и у многих других) есть её характерные особенности. В частности, MySQL довольно быстро обрабатывает таблицы с большим количеством записей (вертикально) и начинает прилично так проседать, когда кол-во столбцов (или того хуже, объём данных в этих столбцах) растёт (горизонтально). Это из личного опыта, и на возведение в статус аксиомы - не претендует

    А так же по той причине, на основании следующего:
    1. Насколько я понимаю, данные у Вас из разных соц. сетей - по определению разные (в смысле, какая-то их часть), но их фактическое количество (кол-во соц. сетей или источников данных) - фиксированное
    1.1 Даже частично одинаковые данные из разных соц. сетей могут иметь разный формат, например пост из твиттера не может быть длинее N символов (не помню сколько... 140?), а пост в ФейсБуке - может быть куда больше... и т.д.
    2. При добавлении новой соц. сети - у Вас добавляет не просто какое-то "радомное свойство к товару", типа: "была газовая плита, у нее была ширина и длина, сегодня померили - нужно теперь высоту добавить", с введением новой соц. сети в код приложения добавляется какой-то довольно "толстый" модуль, для обработки конкретно этой соц. сети

    С учётом выше сказанного, я бы делал для каждой соц. сети, отдельную таблицу, так как:
    1. Кол-во параметров для каждой соц. сети не меняется (или меняется крайне редко)
    2. Таким образом одна таблица будет меньше занимать на диске, т.е. в некотором смысле - это будет сегментирование (хоть и в несколько упрощенной и "вынужденной", а не осознанной форме), что в общей сложности повышает производительность
    3. Кол-во "дыр" в данных у Вас будет гораздо меньше, а с учётом того, что постов там у Вас тысячи, а соц. сете не 2 и не 3, а уже 14 и это не предел...

    P.S.
    Как такой инсёрт сделать в две таблицы вместо одной?
    Сделать два инсёрта. Если для Вас очень принципиально время вставки и оно гораздо важнее времени получения данных из таблицы (и два инсёрта - гораздо медленнее одного) - используйте соотв. тип табиц, кажется он называется "ARCHIVE" в MySQL.

    Как такой инсёрт сделать в две таблицы вместо одной?
    Второй вариант - заменить MySQL на PostgreSQL и хорошенько его изучить. Там есть "наследование" таблиц и другие механизмы, которые позволяет Вам делать инсерт в одну таблицу, а движок сам будет распихивать "кого куда", при этом проблема которую Вы описываете изначально, при правильном подходе - будет решена (сама собой) раньше, чем успеет начаться.
    Ответ написан
    Комментировать
  • Что выбрать OLTP или OLAP?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    OLAP - это, грубо говоря, аналитика. Всякие отчеты, статистика, агрегации, кубы и прочие занимательные вещи. Подробно про OLAP можно почитать вот тут - https://ru.wikipedia.org/wiki/OLAP

    OLTP - это, грубо говоря, огромный поток простых данных (небольшой размер транзакции, но их очень-очень много).

    Подробно вот тут: https://ru.wikipedia.org/wiki/OLTP

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

    @aol-nnov
    до какой-то версии андроида системный компонент вебвью был частью, кхм, системы!
    по этой причине он очень редко получал обновления.
    но потом наступил переломный момент и его вынесли в маркет и всё заиграло новыми красками.
    повлияло ли это на старые версии андроида? думаю, нет.

    конкретно про кордову ничего сказать, увы, не могу.
    Ответ написан
    6 комментариев
  • Для чего нужно подписывать apk файлы?

    В целях безопасности. Если бы APK не подписывались, то злоумышленники могли бы изменить твоё приложение, добавив зловредный код, и распространять модифицированные версии, буд-то оно оригинальное. А если кто-то получит доступ к твоему Google Play аккаунту, то вообще идеально, любой мог бы подменить твоё приложение чем-то левым. С помощью подписи Google Play и Android валидирует обновления приложений. Ключ, которым производится подпись последующих версий, должен совпадать с ключом предыдущих версий приложения.

    Да, тебе нужно подписывать каждый APK перед заливкой в Google Play.

    И для уточнения по поводу этого:
    Ведь при генерации этого файла для подписи я использую абсолютно произвольные данные

    Подпись производится специальным ключом и криптографическими алгоритмами,. Что ты вводишь в полях типа "название организации" не имеет столько значения, сколько сам ключ, который генерируется случайно в момент создания.
    Ответ написан
    Комментировать
  • Баги во vue.js?

    Fragster
    @Fragster
    помогло? отметь решением!
    При добавлении нового продукта в мутации надо присваивать свойству обновленный массив или пользоваться переопределенными методами для сохранения реактивности, об этом пишут в документации
    В данном случае я бы отказался от хранения по ключам и добавил бы метод получения продукта по id через обход массива (если, конечно, продуктов там не тысячи)
    Ответ написан
    4 комментария