• Какие задачи решает реактивное программирование?

    @lega
    wikipedia говорит - в общем распространение изменений, как в формулах exсel таблиц

    Excel - наверно самый показательный пример, когда вы меняете одну ячейку, то все зависимые ячейки пересчитываются (сами), зависимые ячейки от зависимых тоже пересчитываются и т.д. Т.е. получается такой поток/разлив информации. Для реализации исходная ячейка должна обладать списком всех зависимых ячеек (первого уровня/напрямую зависимых).

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

    @pacahon
    Вы читали кучу мануалов, но упустили самое главное - официальная документация. Как так? Там как раз и говорится как делать и почему. На вопросы уже поотвечали, но пройдусь ещё раз, раз столько времени на чтение ответов потратил :>
    1) https://docs.docker.com/engine/userguide/dockervolumes/
    2) https://docs.docker.com/engine/articles/host_integ...
    3) Ответ простой - как хотите. Как лучше знаете только вы, звучит банально, но это так. Хотите хоть всё в один контейнер запихните, это ваше дело. Хотя рекомендуют 1 компонент на 1 контейнер. В этом есть своя логика - хочется обновить только mysql - обновляете этот контейнер и не думаете, поломался ли у вас uwsgi или nginx или ещё чего.
    4) Напишите свой первый Dockerfile, станет куда яснее как выбирать. А пока доверяйте только официальным образам.
    5) git? Этот вопрос - следствие непонимания вопроса 1)
    6) Уже ответили. Самое простое, если не понимаете - не используйте dockerhub вообще. Или начните понимать. :) Или платите за приватные репозитории, чтобы не думать об этом.
    Ответ написан
    Комментировать
  • Где обучиться азам администрирования VPS?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Ответ написан
    Комментировать
  • Расскажите про ваш опыт с файловыми системами для мелких файлов?

    knutov
    @knutov
    Если у вас ext4, то проблема происходит от журнала. Если запустить

    iotop -oPa

    увидите jb2, съедающий всё ио (или iostat -kx 1)

    1) можно просто удалить журнал.

    tune2fs -O ^has_journal /dev/sdX

    где sdX - ваш диск с разделом (т.е. например sda2)/

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

    2) Можно поставить нормальные серверные диски.

    Это, например, Intel s3610, но если без очень больших нагрузок, то Intel S3500 или Seagate 600 Pro тоже будет, скорее всего, достаточно (но Seagate 600 Pro не советую, в текущий момент его смысла покупать уже нет).

    upd: про 20тб. Проблем в целом не должно быть, если это zfs (raidz2, например), + l2arc cache. Ну или делать на ссд дисках (серверных типа s3610, или обычных, но с LSI контроллерами).
    Ответ написан
    Комментировать
  • Из чего состоит окружение продвинутого php разработчика?

    nonlux
    @nonlux
    Поправил ответ, так будет логичнее.
    Ниже приведены инструменты, которые использую лично я и причины почему.

    1. docker-окружение
    (в 90% случаев для веб-разработки достаточно php -S 0.0.0.0:8000)
    виртуальные машину становятся нужны:
    - когда надоест переустанавливать хост-систему из-за обилия хлама
    - когда работаешь с несколькими проектами имеющие специфические (разные) настройки окружения(php, web-сервер, база)
    - когда надоест решать проблемы в команде из-за того что по разному настроено окружение

    2. git - система контроля версий
    Помнить что ты и когда изменял, должен не человек, а машина.
    Это необходимо:
    - чтобы не испортить всю работы за прошедший год нажав del
    - чтобы определить кто из команды злодей и все испортил
    - чтобы не думать как перенести свежую версию проекта с одной машины на другую

    3. composer - пакетный менеджер для php
    Нужно, когда лениво помнить все ссылки на все php библиотеки, самому качать их, подключать в автозагрузку

    4. behat + phpspec
    Тесты нужны:
    - когда хочется почувствовать себя безопасности и для сладко спать ночь, забыв о кошмарах о сломанном коде
    - когда в production все снова сломалось
    - когда ты написал одну новую фичу, а сломал три

    5. zsh
    Хорошей консолью приятно пользоваться, работа идет быстрее.
    Консоль есть жизнь, жизнь есть shell.

    6. tmux
    Мало одно окошка в консоли, тогда tmux идет к вам.
    В качестве бонуса получите возможность парного программирования совершенно бесплатно

    7. tmuxinator
    Надоело каждый раз открывать кучу окон для tmux, попробуйте его )
    8. vim
    - Потянуло на что-нибудь необычное?
    - Хочется эффективнее писать код ?
    Ну что открыли vim? В первый раз? Поздравляю закрыть вы его не сможете )
    Вызывает зависимость при частом потреблении


    9. continuous integration сервер
    Вообще ci сервер это одушевленная машина. Это твой тамагочи, ты кормишь его хорошим кодом, он радуется и ты видишь приятный зеленый огонек. Если ты дал с код от скажет что не вкусно. Ну а если ты ему, что гнилое он будет долго на тебя орать плохими словами. Со временем он растет и учится делать более серьезные вещи, и начнет помогать тебе:
    Его скилы:
    - он может сам выполнить 10 минутные тесты
    - подготовить и опубликовать проект
    - рассказать о твоем коде, даже то что ты не знаешь
    Он легко обучается и ты легко сможешь научить его удивительным вещам.

    10. куча линтеров на pre commit hook
    Чтобы ci не кормить плохими продуктами, хорошо бы проверять что ты сделал до отправки на сервер. Что бы не забыть это сделать git сам работу.

    11. gulp
    gulp - это еще один твой помощник.
    как если использовать, как watcher файлов + livepreview, можно забыть о F5 в браузере

    12. bower
    Тоже что и composer но для управления ассетами. Это я о всяких jQuery и Bootstrap

    666. Линукс
    Даже если не хочется ставить как хост-систему, его все равно надо знать. Ваш код будет работать на нем )
    Ответ написан
    16 комментариев
  • Где популярные онлайн тестирования разработчиков?

    ptitca_zu
    @ptitca_zu
    Programmer. Reader. Introvert
    Ответ написан
    Комментировать
  • Как протестировать сайт под высокие нагрузки?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    10к пользователей - это абстракция. Нагрузка обычно меряется либо в rps (request per second), либо в bit/sec.

    rps можно померить через утилиту ab (apache benchmark)
    трафик - uperf
    Ответ написан
    Комментировать
  • Верстка в Linux?

    zorro76
    @zorro76
    Я перешел с винды на Ubuntu 3 месяца назад. Все ок и все работает должным образом. Начиная от командной строки и заканчивая редактором. А то что нет полноценного Photoshop это миф. Посмотри тут https://www.youtube.com/watch?v=wjmQJckOATM И собственно зачем Photoshop верстальщику, понятно что для посмотреть макет и нарезать, все. Правда все это можно сделать и на gimp, но тут дело вкуса. Лично я за продукт Adobe assets.adobe Все остальное настраивается и работает на Linux в разы проще и быстрее. node, npm, bower, gulp, grunt, git ... да собственно все, что нужно фронт-энд разработчику. Тот же looftblog выложил видео с настройкой среды разработчика на Linux https://www.youtube.com/watch?v=DfSm7SVq4LA

    UPD: и да сейчас вообще Avocode рулит
    Ответ написан
    4 комментария
  • В каком случаи использовать --save и --save-dev в NPM?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Компиляторы-транспиляторы-трансляторы (типа Coffee, LESS, Jade), тест-раннеры, стайл-чекеры и линтеры (mocha, chai, karma, (js|es)lint, jscs), плагины для таск-раннеров (grunt-contrib-watch, gulp-jade) — все это обычно ставится как --save-dev, потому что нужно только тем, кто контрибьютит в этот проект, работает с его кодом.

    Библиотеки и фреймворки (expressjs, jquery, backbone), на основе которых работает ваш код, без которых ваш код не запустится у его потребителя — ставятся как --save.
    Ответ написан
    3 комментария
  • Как правильно использовать Docker для веб разработки?

    zvd
    @zvd
    Software developer interesting in DevOps
    Добрый день.
    Все, как вы их назвали, «задачи» должны быть по разным контейнерам.

    1. Что брать за базовый образ?
    Что используете то и берите. Используете в работе Debian? Берите Debian ( https://registry.hub.docker.com/_/debian/ )
    2. Чтобы создать свой базовый образ который будете в дальнейшем использовать для приложения, вот вам пример Dockerfile:
    #
    # MyBaseimage Dockerfile
    #
    
    # Pull base image.
    FROM ubuntu:14.04
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    RUN apt-get update
    RUN apt-get upgrade -y
    
    RUN apt-get install -y language-pack-en
    ENV LANGUAGE en_US.UTF-8
    ENV LANG en_US.UTF-8
    ENV LC_ALL en_US.UTF-8
    
    RUN locale-gen en_US.UTF-8
    RUN dpkg-reconfigure locales
    
    RUN echo "Etc/UTC" > /etc/timezone
    RUN dpkg-reconfigure -f noninteractive tzdata
    
    RUN apt-get install -y build-essential
    RUN apt-get install -y python python-dev python-setuptools python-pip python-virtualenv
    RUN apt-get install -y libxml2-dev wget
    RUN apt-get install -y libpcre3
    RUN apt-get install -y libpcre3-dev
    RUN apt-get install -y libssl-dev
    RUN apt-get install -y libncurses5-dev
    RUN apt-get install -y git git-core
    RUN apt-get install -y libpq-dev
    
    # install nginx
    RUN apt-get install -y software-properties-common python-software-properties
    RUN apt-get update

    Собрать image в директории где у вас лежит Dockerfile
    docker build -t your_docker_account/your_baseimage .

    3. Dockerfile для сборки вашего образа уже с приложением
    #
    # MyApp Dockerfile
    #
    
    # Pull base image.
    FROM your_docker_account/your_baseimage
    
    MAINTAINER Your Name <your.email@gmail.maybe>
    
    # Set instructions on build.
    RUN virtualenv /env
    ADD ./ /code
    
    RUN cd /code; /env/bin/python setup.py install
    RUN cp /code/config/config.yml.docker_example /etc/code/config.yml
    
    # Expose ports.
    EXPOSE 8484
    WORKDIR /code
    CMD ["/env/bin/python", "app.py"]

    4. Собрать образ с приложением
    docker build -t your_docker_account/your_app_container .

    5. Запустить контейнер с БД, в качестве примера PostgreSQL
    docker run -p :5432:5432 --name my_postgresdb_container -e POSTGRESQL_DB=mydb_name -e POSTGRESQL_USER=mydb_user -e POSTGRESQL_PASS=super_secret_password -d kamui/postgresql

    для mariadb аналонично, контейнеры ищем здесь: https://registry.hub.docker.com/
    6. Запустить контейнер с вашим приложением, пример:
    docker run -d -p :5000:5000 \
      --name my_app_container \
      --link my_postgresdb_container:postgresdb \
      -e DOCKERDB_ENV_POSTGRESQL_DB=mydb_name \
      -e DOCKERDB_ENV_POSTGRESQL_USER=mydb_user \
      -e DOCKERDB_ENV_POSTGRESQL_PASS=super_secret_password \
      your_docker_account/your_app_container

    7. Подключиться к запущенному контейнеру с приложением
    docker exec -it your_app_container /bin/bash
    8. Читать stdout запущенного приложения в контейнере
    docker logs -f your_app_container

    + Чтобы автоматизировать запуск всех необходимых контейнеров берите Docker Compose ( https://docs.docker.com/compose/ )
    Пример файла конфигурации:
    your_app:
      build: .
      links:
        - postgresdb
      ports:
        - "5000:5000"
      environment:
        DOCKERDB_ENV_POSTGRESQL_DB: mydb_name
        DOCKERDB_ENV_POSTGRESQL_USER: mydb_user
        DOCKERDB_ENV_POSTGRESQL_PASS: super_secret_password
    postgresdb:
      image: kamui/postgresql
      ports:
        - "5432:5432"
      environment:
        POSTGRESQL_DB: mydb_name
        POSTGRESQL_USER: mydb_user
        POSTGRESQL_PASS: super_secret_password

    И теперь вместо пунктов 5 + 6 где мы запускали контейнеры мы можем всё стартануть одной командой
    docker-compose up

    + можно смонтировать код в контейнер и разрабатывать непосредственно в docker'контейнере.
    Надеюсь чем-то вам помог.
    Ответ написан
    3 комментария
  • Как seo-продвинуть сайт без денег?

    XXX
    @XXX
    Решение где-то рядом
    Alexander-K
    • Проведите аудит сайта на предмет косяков (инструменты вебмастеров Вам в этом помогут)
    • Если сайт еще не добавлен в гугл и яндекс вебмастер, то добавьте.
    • Исправьте косяки, sitemap, robots.txt, meta-теги, описания страниц, заголовки, оптимизация содержимого страниц, перелинковка и т.д.
    • Скормите карту сайта поисковикам
      http://google.com/webmasters/sitemaps/ping?sitemap=ссылка на Ваш sitemap
      http://www.bing.com/webmaster/ping.aspx?siteMap=ссылка на Ваш sitemap

      Для того чтобы яндексу карту отправить, придется зайти на страницу вебмастера. И до кучи можете воспользоваться сервисом пинга в 40 поисковиков.
    • Если сайт региональный, то задайте регион.
      В яндекс вебмастере задается в настройках сайта, География сайта → Регион сайта
      В гугловских инструментах вебмастера, Поисковый трафик → Таргетинг по странам и языкам → Страна
    • Составьте семантическое ядро
    • Напишите SEO тексты заточив под ключи по которым будете двигаться
    • Если сайт не статичный, зарегайте его в соц сетях и постите туда новости со ссылками на свой сайт
    • Регайтесь на крупных форумах, с ссылками не закрытыми от индексации и напишите там про Ваш сайт
    • Оставляйте комменты в dofollow-блогах


    "Тупо регится на площадках" и спамить ссылку на Ваш сайт, не зная ключей по которым двигаетесь, бесполезно и вредно.
    Ответ написан
    2 комментария
  • Зачем в web пишут src="blob: путь"?

    v_decadence
    @v_decadence
    Затем, чтобы указать путь к данным, которые находятся не на сервере, а в памяти Вашего браузера.
    Получить его можно через URL.createObjectURL(file).

    A blob: URL does not refer to data the exists on the server, it refers to data that your browser currently has in memory, for the current page. It will not be available on other pages, it will not be available in other browsers, and it will not be available from other computers


    Convert blob URL to normal URL
    Ответ написан
    Комментировать
  • Подскажитe примеры креативных сайтов-визиток веб-программистов?

    Kaaboeld
    @Kaaboeld
    Web-разработчик
    Тоже сейчас размышляю о подобном(для своего(команды) сайта).
    Вот из последнего для вдохновения что мне подкинули:
    mystaticself.com
    Так же рекомендую посмотреть на работы с awwwards:
    awwwards.com
    Ответ написан
    1 комментарий
  • Swift_RfcComplianceException - как исправить ошибку?

    ellrion
    @ellrion
    global $email;
    Вы это серьезно?!
    почему не ?
    Mail::send('emails.activation', $data, function($message) use ($input) {
        $message->to($input['email'])->subject('Спасибо за регистрацию!');
    });
    Ответ написан
    Комментировать
  • Каков план личностного развития JavaScript программиста с нуля?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Выучить русский язык. Узнать, что такое "личностное развитие" и чем оно отличается от профессионального.
    Ответ написан
    2 комментария
  • Использование Silex и SecurityServiceProvider

    @zloyusr
    Так, сразу уточню, что работаю с Symfony 2, а не конкретно с Silex, но компоненты у них общие.
    Для начала прочтите документацию по Security Component.
    Теперь попробуем разобраться по строчкам:
    'pattern' => '^/admin' - Это просто "регулярное выражение" по которому срабатывает тот или иной файерволл. Мы можем указать и просто '^/', тогда сработает сразу для всех разделов.
    'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check') - Это пути где будет лежать форма логина и путь по которому она будет проверяться.
    'http' => true - Это тип аутентификации. В данном случаи базовая http аутентификации предусмотренная браузером. wsse - Это другой тип аутентификации, прочитать можно опять же в документации.
    'users' => array(...) - Провайдер пользователей. В самом простом случае, да это массив. Если вы собираетесь хранить пользователей в базе используйте например этот.
    Ответ написан
    3 комментария
  • Аналог Evernote - храним сниппеты кода по категориям?

    Под OS X есть парочка красивых приложений, которые решают вашу проблему:

    Как вариант простое "облачное" решение — GistBox

    Ответ написан
    2 комментария
  • Как правильно реализовать модель в Symfony2 на базе MVC?

    JekaRu
    @JekaRu
    Логику модели обычно выносят в сервисный слой
    Для работы с базой используют классы репозитарии.
    Сейчас популярен подход похожий на ваш c UserModel, создают класс — менеджер модели, туда инкапсулируют репозитарий модели, EntityManager итд…
    Получается очень удобно вынести в него весь сервисный слой.
    Примеры:
    github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Doctrine/UserManager.php
    github.com/KnpLabs/KnpBundles/blob/master/src/Knp/Bundle/KnpBundlesBundle/Manager/BundleManager.php
    Ответ написан
    1 комментарий
  • Как правильно организовать деплой приложения?

    Мой стек php:
    — для тестов: локально Behat;
    — для деплоя capifony;
    — для модульности composer.
    Ответ написан
    Комментировать