• Самый простой способ реализовать real time MySQL (без firebase!) базу данных для маленького приложения?

    @xfg
    Базу данных можно выбрать любую. Она не играет роли в realtime приложениях. Позвольте вам немного объяснить. Для передачи данных между клиентом и сервером в браузере существует всего два протокола. HTTP и Websocket. Firebase не магия и также использует их. Если браузером не поддерживается Websocket, то firebase откатывается на HTTP. Используя общераспространенный подход к разработке на PHP у вас не получится использовать websocket протокол поскольку типичные PHP приложения не живут дольше 1 запроса. Соответственно да, в таком варианте остается только ajax. Но точно также работает и firebase если в браузере нет поддержки websocket, так работает facebook, telegram и много всего остального. Они используют long-polling. Клиент отправляет запрос к скрипту на сервер, скрипт в цикле опрашивает хранилище mysql или более продвинутый вариант mysql+redis (чтобы не грузить запросами mysql) и пока данных не будет, цикл так и продолжит крутиться, для клиента это просто выглядит как повисший запрос к серверу. Как только данные появляются, они отправляются на клиент, соединение разрывается, а клиент сразу же отправляет новый запрос.

    Есть развитие этой идеи. Называется HTTP Streaming. Отличие от long-polling в том, что после отправки данных клиенту соединение не разрывается, а сервер продолжает отправлять последующие данные по этому же соединению. Соединение разрывается по таймауту. Минус в том, что прокси-сервера могут кешировать небольшие пакеты данных и данные нужно раздувать например пробелами, чтобы пакет данных достигал минимального размера и был способен пробить кеш прокси-сервера. Плюс в том, что если у вас данные для клиента появляются скажем с переодичностью раз в секунду, то не будет происходить постоянного открытия-закрытия соединения как при long-polling.

    Есть вариант, когда можно реализовать небольшую прослойку на socket.io. Ваше PHP приложение пишет данные для клиента например в redis. Приложение на socket.io подписывается на redis. Когда PHP что-то отправляет в redis, то socket.io мгновенно об этом узнает и рассылает это событие по websocket протоколу всем подключенным клиентам. Минусы. Раздуваете стек. Нет консистентности данных между записью в основное хранилище (mysql/postgre/mongo/etc) и redis. Соответственно может возникнуть ситуация, когда данные записали, но в redis событие не ушло. Поменяете местами, будет наоборот, событие есть, данных в базе нет.

    Вариантов в целом очень много. Всё это называется Comet. Вам проще всего реализовать long-polling.

    А реал-тайм база, которая умела пушить данные клиенту по tcp протоколу (но не в браузер) была и называлась она rethinkdb.com. Ныне не развивается. IP в России заблокирован. На сайт можно сходить по VPN.
    Ответ написан
    3 комментария
  • Зачем вообще использовать тег picture? В чем его плюсы?

    dom1n1k
    @dom1n1k
    Лично для меня практический смысл picture заключен в использовании нескольких форматов. А конкретнее, главный файл в webp плюс jpeg-фолбек - экономия трафика порядка 20-30%.
    Это малая часть возможностей, но в большинстве случаев использую только её.
    Ответ написан
    Комментировать
  • Каков сценарий использования git для одного разработчика?

    KazeZlat
    @KazeZlat
    Погромист-затейник
    Работаете в ветке dev, периодически вливая ее в master. Для крупных задач (не входящих в один коммит) делаете отдельные ветви из dev.

    Вливая dev в master, делаете это с ключом --squash как то так:
    git checkout master
    git merge --squash dev

    Тут теоретически могут быть конфликты, если вы делали коммиты в masterпараллельно с dev, которые вам надо разрешить, а после уже добавляете и делаете один большой коммит:
    git add -A
    git commit -m "Merged dev: %кратко (или нет) основные изменения%"
    git push


    А чтобы не мозолили глаз висящие коммиты с логической незавершенностью, их можно сливать их перед merge с помощью интерактивного rebase:
    git checkout dev
    git rebase -i master

    Откроется редактор, в котором будет список коммитов ветки dev. Здесь можете слепить ненавистные коммиты с помощью команды squash (и тогда вам предложат отредактировать сообщение) или fixup (тут не предложат) и потом сделать git push --force (для одного не критично, в толпе лучше использовать --force-with-lease.

    Или есть еще вариант - лепить к предыдущему коммиту сразу с помощью git commit --amend

    Ну и после merge уже можете на master лейбл версии повесить.
    Ответ написан
    Комментировать
  • Свойства min-height, min-width, max-height, max-width должны иметь всегда фиксированное значение?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Обожаю пятничные вопросы.
    Использовать конечно можно и возможно иногда даже нужно.
    Но сидеть и думать "Как же это применить можно?" ради забавы не хочется.
    Если вам оно ни к чему, зачем вообще спрашивать?
    Ответ написан
    Комментировать
  • Как сделать такой эффект на css?

    andykov
    @andykov
    Shit happens
    Сверху через тени, справа через псевдоэлементы https://jsfiddle.net/efmj07bq/
    Через тени только если фон однородный.
    Ответ написан
    Комментировать
  • Какие проекты может потянуть один человек?

    @MaratN
    Встречаются два друга:
    — Как дела?
    — Да вот, основал новый стартап, очень быстро растём, развиваемся.
    — Круто! А в чём суть стартапа?
    — Я провёл исследование рынка и решил публичный дом открыть.
    — Ого, интересно, и какие цены?
    — Анал — $100, орал — $50.
    — А классический секс?
    — Понимаешь, с этим труднее... это ж стартап. В общем, я пока один работаю…
    Ответ написан
    Комментировать
  • Как правильно сверстать такое меню на flexbox?

    задай для li-шек width: 100%;
    Ответ написан
    Комментировать
  • Круглый интерфейс на jQuery?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    1. Вам нужно ввести переменную previous_point
    2. При каждом наведении, сохранять в нее текущую позицию
    3. Дальше вам нужно усложнить условия, что-то вроде:
    $(".right").on("hover", function () {
    
    if (previous_point === "bottom") {
        arrow.css({ transform: 'rotate(290deg)' }); // цифра от балды
    } else {
        arrow.css({ transform: 'rotate(180deg)' });
    }
    
    });
    Ответ написан
    4 комментария
  • Модели в Rails, как вывести информацию?

    Freika
    @Freika
    Senior Ruby on Rails developer
    Чувак, ты тут уже не первый простой вопрос постишь. Научись сначала формулировать запрос, потом вводить его в гугл, а потом ходить по ссылкам и читать, желательно гуглить на английском. Больше результатов будет.

    И прочти rusrails.ru от корки до корки.
    Ответ написан
    Комментировать
  • Как правильно прописать nth-child?

    zmeika
    @zmeika
    Нужно вынести nth-child из а, потому что вам нужен третий .item, а не третья ссылка.
    Ответ написан
    Комментировать
  • Как передать из php echo в javascript alert?

    artgrosvil
    @artgrosvil
    #dev #programming #student #startups #chill
    На сервере:

    $sql = mysql_query("INSERT INTO temp (login, id, date, status) VALUES ('$login', '$id', '$komm', '$time', '0') ");
    
    
    $data = array(
    	'status' => 'success',
    	'redirect' => '/page',
    	'message' => 'Действие успешно! Ожидайте!'
    );
    print(json_encode($data));


    На клиенте:
    function nameMethod() {
        $.ajax({
            url: '/url',
            dataType: "json",
            type: 'POST',
            success: function (response) {
                window.setTimeout(function () {
                      alert(response.message)
                    }, 2000);
                window.location.href = response.redirect;
            }
        });
    }
    
    <button type="button" onclick="nameMethod()">Submit</button>
    Ответ написан
    2 комментария
  • Как из вертикального меню сделать горизонтальное?

    @annex
    Web Developer
    ul li {
        display: inline-block;
    }
    Ответ написан
    Комментировать
  • Как сделать блок на сайте?

    @ib2
    Веб-программист
    Ну если, как говорите, используете Bootstrap, то там есть соответствующие css-классы visible-xs-*, visible-sm-* и т.д. Они как раз позволяют отображать контент только на конкретных устройствах

    getbootstrap.com/css/#responsive-utilities-classes
    Ответ написан
    1 комментарий
  • Почему может не работать :after в mozille?

    FatSurfer
    @FatSurfer
    Для input не применяется :before и :after.
    Например: shpargalkablog.ru/2013/12/input-before-after.html
    Или же jQuery, собственно.
    Ответ написан
    Комментировать