• Чем отличается ajax-запрос post от get?

    @askhat
    Чем POST отличается от GET

    Семантика HTTP методов на высоком уровне подразумевает операции создания и получения сущности(-стей) методами POST и GET соответственно. На прикладном уровне это означает одно: у метода GET отсутствует `body`, в то время как оно присутствует в POST. Для передачи данных (payload), для создания сущности, например для сохранения новой строчки в БД.

    Синтаксис XHR
    Классическим способом создания такого запроса в браузере станет api `XMLHttpRequest`.

    const data = {whatever: 'payload'};
    // Создадим объект xhr для обработки запроса
    const xhr = new XMLHttpRequest();
    // Открываем запрос
    // @param String - типзапроса
    // @param String - путь до слушателя
    // @param Boolean - true async / false sync
    // Запрос ещё не отправлен
    xhr.open('POST', '/someroute', true)
    // Указываем что это AJAX запрос
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    // Указываем что это JSON payload
    xhr.setRequestHeader('Content-Type', 'application/json');
    // Коллбек запускается при смене состояния xhr
    xhr.onreadystatechange = function () {
      if (xhr.status === 200) {
        console.log(xhr.reponseText);
      }
    };
    // Отправляем запрос
    xhr.send(JSON.stringify(data));


    fetch API

    Вот многих браузерах уже имплементирован fetch API. Скорее всего это станет стандартом, однако используйте на свой страх и риск.

    const data = {whatever: 'payload'};
    // Начнём с заголовков
    const headers = new Headers();
    headers.append('Content-Type', 'application/json');
    // Функция должна вернуть объект Promise
    return fetch('/someroute', {
      method: 'POST',
      headers: headers,
      body: JSON.stringify(data);
    }).then(raw => raw.json()).then(response => {
      console.log(response);
    });


    PS Обратите внимание, в примере отсутствует обработка ошибок, что приведёт к `warning: UnhandledPromiseRejectionWarning: Unhandled promise rejection`
    Ответ написан
    Комментировать
  • Как подключить глобально плагин jquery на vue.js?

    @askhat
    Если не через NPM, то через CDN. Открывайте свой index.html и добавляйте ссылки.

    Но скорее всего вас интересует как заставить это работать. Тут два варианта:

    1. Через хук:
    export default {
      // mounted неплохой вариант, если document должен быть ready
      mounted () {
        const $ = window.$
        $('.main').onepage_scroll()
      }
    }


    2. Или через кастомную директиву:
    export default {
      directives: {
        // Произвольное имя директивы
        onePageScroll: {
          // На этом хуке компонент со всеми дочерними компонентами готов
          componentUpdated (el) {
            const $ = window.$
            // Елемент не нужно «селектить» по классу/ИД т.к. он передан в аргументы директивы
            $(el).onepage_scroll()
          }
        }
      }
    }

    <div>
      <section v-one-page-scroll />
    </div>


    Не уверен, что именно приведённые хуки буду работать хорошо/вообще—попробуйте разные варианты.
    Ответ написан
    Комментировать
  • Что такое индексы в Mongodb?

    @askhat
    Индексы в Монге — тоже что и вдругих БД — упорядоченное поле.

    Почему по ним проще искать? Возьмите две колоды карт, в одной пусть карты идут масть к масти по порядку, а другую растасуйте. Возьмите секундомер и попросите двух друзей найти даму треф, каждый в своей колоде. Результатами поделитесь в комментариях.

    Много индексов конечно вам никто не запретит, сначала даже кажется что это самое логичное. Но потом вы заметите, что при удалении/добавлении элементов в коллекции, надо перестраивать индексы, а это довольно ресурсоёмкая операция. Так что индексы нужны только там, где вы действительно часто ищете.
    Ответ написан
    9 комментариев
  • Выбор средств для реализации двух простых сайтов?

    @askhat
    Под обе задачи порекомендую фреймворк Middleman, по сути это консольный генератор html. Поддерживает «старые добрые» технологии вроде sprockets для конкатенации ассетов, так и «новомодные» вебпаки через т.н. external_pipeline.
    С самого начала фреймворк представляет средства отделения данных от представления через yml файлы или frontmatter, однако не настаивает на этом. Расширенный функционал, вроде блога, доступен через расширения, коих великое множество.
    В результате у вам получится просто набор статического html, который можно закинуть на любой хостинг. Никакой php, или что угодно, там не нужен (а значит и взламывать нечего).
    PS: VPS рекомендую от DigitalOcean (у меня в профиле ссылка на бонусные $10), а AWS это отдельная вселенная, которая вам не нужна на этом этапе.
    Ответ написан
    Комментировать
  • Как работать через SSH не останавливая процесс после отключения?

    @askhat
    Я для этого пользуюсь tmux:
    1. Подключаетесь к машине
    2. Подключаетесь к сессии tmux
    3. Запускаете процесс
    4. Не закрывая окна tmux, закрываете ssh сессию
    Ответ написан
    Комментировать
  • Каковы юридические последствия размещения недостоверных данных о сотрудничестве?

    @askhat
    С юридической точки зрения рисков никаких, даже если логотип этой компании на вашем сайте каким-то образом вредит деятельности, создаёт репутационные риски или нарушает авторское право, вас сначала уведомят о необходимости удалить материал, а лишь затем, в случае вашего отказа, обратятся в суд с целью компенсировать ущерб. Размер которого я не могу представить соизмеримым издержкам и/или имеющим смысл требоваться с компании позволяющей себе такого рода промо.
    Настоящий риск кроется в непоправимом вреде вашей карме и неспособностью ответить в конце себе на вопрос «прожил ли я честную жизнь?»
    Ответ написан
    1 комментарий
  • Насколько важную роль при устройстве на работу программистом играют собственные OpenSource проекты?

    @askhat
    Наличие публичных репозиториев как минимум покажет, как вы работаете с VCS. А если вы не умеете работать в VCS, значит компании придётся тратить ресурсы на ваше обучение, что снижает вашу ценность. Тим лид будет очень зол, если в первый же рабочий день вы запушите в мастер.
    Во-вторых это покажет, что вы не стыдитесь своей работы—не пишете говнокод. Здесь не идёт речь о благотворительности, вы не лишаетесь прав на свою работу, она по прежнему принадлежит вам. К тому же, вы ведь тоже используете открытые библиотеки, т.е. благотворительностью не занимаетесь, но активно её получаете.
    И последнее, ваши репозитории иллюстрируют ваш кругозор. Даже если вы устраиваетесь на позицию скажем верстальщика, и параллельно поддерживаете библиотеку для скажем нейро-сетей, это увеличит количество опций которые могут ожидать вас на новом рабочем месте.
    Ответ написан
    1 комментарий
  • Связь моделей в Rails, как проверить связь?

    @askhat
    В контроллере, обслуживающем представление обеих моделей, необходимо обратиться к этим моделям и записать их в переменные экземпляра.
    Ответ написан
    3 комментария
  • Как мне взять архитектуру с дева и потом со своими изменениями запушить всё в другую ветку?

    @askhat
    В ветку запушить нельзя, можно:
    1. Сделать merge — отдельным коммитом (или без, если возможен fast forward) добавить коммиты из ветки в ветку
    2. Произвести rebase — создать дубликаты коммитов
    3. Выбрать коммиты с помощью cherry-pick — скопировать отдельные коммиты
    Ответ написан
    2 комментария
  • Как работают тома в Docker?

    @askhat
    Не считая хост директорий, есть 2 способа делать персистанс в докере: (1) дата-контейнеры и (2) вольюмы. На примере композа, рассмотрим оба варианта.

    1. Дата-контейнеры
    Самый старый и, на мой взгляд, костыльный способ. Заключается в том, что данные будут сохраняться в контейнере в котором не запущен процесс, и по факту контейнер остановлен. В качестве такого контейнера можно использовать «основной» имедж или использовать специальный, как tianon/true.
    docker-compose.yml
    version: '2'
    services:
      web:
        image: 'nginx'
        volumes_from:
          - 'data'
      data:
        build: './public_html'

    public_html/Dockerfile
    FROM nginx
    ADD index.html /var/www/public_html
    CMD /bin/true

    Обратите внимание на директиву CMD в Докерфайле дата-контейнера. Не смотря на то что исходным имеджем является nginx, как и в сервисе web, команда /bin/true не запустит процесс, а лишь сигнализирует докеру об успешной сборке контейнера. docker-compose ps покажет что дата-контейнер иммет статус типа Exit..., и это именно то состояние которого мы ищем для этого контейнера.
    Прим.: для tianon/true директиву CMD указывать не обязательно, однако придётся указать директиву VOLUME, так как в отличии от основного имеджа, она не указана в исходном Докерфайле.

    2. Вольюмы
    Или, как их называют официально, именованные вольюмы. Более очевидный способ работать с персистансом.
    docker-compose.yml
    version: '2'
    services:
      web:
        image: 'nginx'
        volumes:
          - 'web_data:/var/www/public_html'
    volumes:
      web_data:

    Такая конфигурация автоматически создаст вольюм с именем web_data и замапит его на папку /var/www/public_html внутри контейнера web, при старте композа. Обратите внимание, что в этом примере вольюм обозначен как ключ без значений, это валидный ямл синтаксис, и, в данном случае, означает что композ сфолбэчит опции вольюма на дефолтные, обязательной из которых является driver: 'default'. В случае если вы поднимаете композ локально или на удалённой докер машине, дефолтный драйвер вам подойдёт, если только вы не знаете что нет.
    Прим.: из драйверов, которые представляют особый интерес, во всяком случае мне, драйвер для NFS и DigitalOcean Block Storage.

    Дефолтное поведение докера — не удалять ничего пока пользователь не попросит этого эксплицитно, это распространяется как на дата-контейнеры, так и на вольюмы.
    Ответ написан
    2 комментария
  • Как реализовать генерацию scss в хелпере?

    @askhat
    Как написать Rails helper который будет возвращать строку обработанную сторонней библиотекой?

    require "sass"
    def foo(sass)
      Sass.compile sass
    end

    Только один вопрос: зачем?
    Ответ написан
    Комментировать
  • Зачем кроме удлинения нужен толстый шнур для зарядки macbook air?

    @askhat
    По нему ток силой до 16А (по этому он такой толстый), далее в этой белой коробочке ток понижается и трансформируется в постоянный — пригодный для зарядки аккумулятора и питания ноутбука.
    Ответ написан
    3 комментария
  • Как поставить ownCloud за Nginx в Docker?

    @askhat Автор вопроса
    Проблема в том, что proxy_pass http://127.0.0.1:6789; смотрит на собственный контейнер, а не на сервис owncloud. К счастью docker-compose добавляет адреса сервисов в /etc/hosts, в чём можно убедиться выполнив команду docker exec nginx cat /etc/hosts, там будет строчка 172.17.0.2 owncloud 8a567934bb13.

    Значит если изменить docker-compose.yml, заменив ports: - 6789:80 на expose: - 80, и nginx.conf, заменив значение proxy_pass на http://owncloud; — всё заработает.
    Ответ написан
    3 комментария
  • Влияет ли как-то использование css-классов hidden-xs hidden-sm на сео-оптимизацию?

    @askhat
    Презентационные классы и сам CSS косвенно влияют на релевантность страницы через поведенческие факторы. И если отсутствие некоего блока на мобильных устройствах, скажем, уменьшает bounce rate — влияние несомненно положительное.

    Индексируются документы, а не отрендеренные страницы. В индекс попадёт всё.
    Ответ написан
    Комментировать
  • Как организовать акцию в ночное время?

    @askhat
    var time = new Date();
    if (time.getHours() === 23) {
      // do something
    }
    Ответ написан
    Комментировать
  • Как правильно сделать "статус" для задачи?

    @askhat
    Статус это – состояние, состояние это – стейт, стейт это – state machine
    Ответ написан
    4 комментария