• Как переместить окно с одного монитора на другой Ubuntu 14.10?

    jidckii
    @jidckii
    system administrator
    ctrl+ shift+alt+стрелка(влево ; вправо; вниз; вверх)
    Ответ написан
    8 комментариев
  • Как правильно делать опции при написании плагина?

    Почему бы вам не использовать jquery boilerplate? Это грамотная заготовка для создания плагина, с опциями и цепочкой (заодно сможете на основе кода разобраться в основных принципах). А вообще, не вижу проблемы - в философии jquery вы всегда будете работать с переданным в плагин элементом (например, через цепочку - главную фишку jquery), и следовательно, используя замыкание, для каждого элемента на странице будет создан собственный объект выполнения со своей областью видимости.

    P.S. Также рекомендую при создании событий использовать пространство имен.

    P.P.S. Вы (судя по коду) всегда обращаетесь к определенному классу (т.е. заново ищете элемент на странице), а надо обращаться к переданному в функцию объекту. Это исключит конфликты.
    Ответ написан
    3 комментария
  • Как тут сократить количество загружаемых картинок?

    В js кол-во выбранных картинок вы можете проверить так:
    $('#photoimg').die('click').live('change', function()			{ 
        var files = this.files;
        if (files.length > 5) {
           console.log("Вы превысили лимит на кол-во файлов!");
           return;
        }
        //Далее идет ваш код
    });

    И я бы на вашем месте перешел бы на новую версию jQuery и не использовал бы ф-ю live она признана устаревшей.
    Ответ написан
    4 комментария
  • В чем разница между var f = function(){}; и function f(){};?

    standy
    @standy
    var f = function() {};function expression
    function f() {};function declaration

    Основная разница в том, что второе поднимает определение функции до начала области видимости, в которой она объявлена. То есть можно использовать функцию до ее объявления.

    hoisted(); // выведет 'foo'
    
    function hoisted() {
      console.log('foo');
    }

    notHoisted(); // TypeError: notHoisted is not a function
    
    var notHoisted = function() {
       console.log('bar');
    };


    upd:
    Другое отличие состоит в возможности моментального вызова функции, так называемое iife

    var expression = function() { console.log('foo'); }();
    // выведет 'foo'

    function declaration() { console.log('bar'); }();
    // SyntaxError: expected expression, got ')'
    Ответ написан
    1 комментарий
  • Как правильно использовать 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 комментария
  • Grunt vs Gulp vs Prepros vs Codekit?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Grunt - просто забудьте, старый, тупой велосипед который нужен только потому что людям не нравится Make или Ant. Приходится возиться с временными файлами, жирные и не читабельные конфиги... короче зачем...

    Prepros - не серьезно. Если честно даже не знаю что тут сказать, для верстальщика норм, для фронтэнда - на любителя.

    Codekit - не серьезно. Для тех кто не в состоянии разобраться с чем-то более гибким.

    Gulp - наше все. Никаких временных файлов, все манипуляции в памяти за счет чего все очень быстро, очень гибко (code over configuration)... Начиная с версии 4 будет вообще ништяк. Использовать что-то другое не вижу смысл. Только для специфичных задач или от лени.
    Ответ написан
    15 комментариев
  • Как подставить изображение в input?

    thewind
    @thewind
    php программист, front / backend developer
    А вы посмотреть, как сделано в ВК, не смогли?( это же просто. А по сути вопроса - смотрите атрибут contenteditable для div-ов например.
    Ответ написан
    Комментировать
  • Как сделать выравнивание формы по центру?

    aliencash
    @aliencash
    Партизан
    Если известен размеры формы авторизации, например width: 400px; height: 200px;

    .form {
    position: absolute;
    top: 50%;
    left: 50%;
    margin: -100px 0 0 -200px; /* отступы равны половинным размера формы */
    z-index: 9999; /* чтобы форма была поверх всех элементов страницы */
    }
    Ответ написан
    2 комментария
  • Где и какие есть актуальные ресурсы для front-end?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    1) tympanus.net/codrops (как указали в другом ответе)
    2) habrahabr.ru/posts/frontend - нувыпоняли.
    3) Подписаться и еженедельно читать фронт-енд дайджесты (ну или просто зайти на сайт и читать там выпуски):
    a) javascriptweekly.com
    b) css-weekly.com
    c) tympanus.net/codrops/collective
    d) habrahabr.ru/company/zfort - у них самые большие дайджесты, там до кучи еще и дизайн/новости/крутые сайты и прочее.
    (соответственно ссылки во всех этих дайджестах часто повторяются, так что не пугайтесь объемам)
    4) codepen.io - тут смотрите код, вдохновляетесь чужими работами и пилите свои.
    5) Лезете в твиттер, подписываетесь на крутых разработчиков, там тоже проскакивает много годноты.
    Ответ написан
    Комментировать
  • Docker. Как контролировать код, базу данных и выпуск в production?

    UnknownHero
    @UnknownHero Автор вопроса
    Добавлю ответ на свой же вопрос.

    Прошло достаточно времени и я успел посмотреть и попробовать множество инструментов связанных с Docker.

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

    Приложение для администрирование развёрнуто на 1-м сервере, на нём есть Docker Registry , Jenkins и ещё пару веб страниц с разной информацией. Всё это обернул в Nginx , работает здорово. Само приложение тоже использует Docker , но обновлять его нужно руками (ssh and etc).

    Сайт ( который на самом деле состоит из бизнес логики , DAL , Postgresql , Rest API , web-frontend , web-backend и ещё пару уровней абстракции :) ) использует содержит около 10 Dockerfile.

    Внутри приложения использую инструменты сборки (grunt для nodejs) и собираю приложение во время сборки образа (docker build) , либо после запуска контейнера для продолжительной разработки с помощью FIG.

    После правки кода, заливаю всё в git репозиторий, Jenkins собирает образы (docker build) и отправляет в Docker Registry, после чего сообщает серверам (сейчас он 1), что нужно обновить образы (docker pull) , и перезапустить контейнеры. Там где нужно сохранить данные , использую data containers , их я не перезапуска и не трогая.
    Со временем хочу сохранять состояние data containers (docker commit) и заливать их на Docker registry (docker push) для бэкапа некоторых данных.

    Сервер собирает и перезапускает обновлённые контейнеры с помощью самописных bash скриптов (они не сложные ), т.к. родные для Docker инструменты для этих целей ещё в стадии разработки (Docker swarm , Docker machine , Docker compose) , а стороние решения скорее всего умрут после выхода этих инструментов.

    Через Environment variables говорю контейнеру в каком он режими работает (local/test/live), но нужно это только для минификаций и уровня логгирования. В этих настройках - чем меньше различия,тем лучше.

    Всё это загнал в vagrant , отлично работает ,но требует хорошое железо для разработки.

    В планах:
    - научиться тегировать образы, что бы можно было откатить все сервера до рабочего состояния в случае багов.
    - добавить процесс автоматического тестирования и оценки качества в Jenkins (для docker приложений нужно поднимать ещё jenkins slave )
    - прикрутить ansible для деплоя и прочих удобностей для администрирования. Связать его с Jenkins

    Итог:
    -Однин раз написал, везде использую.
    - Автоматизация до уровня commit = staging deploy
    - Разделение административных инструментов и сервисов от бизнес приложения.
    - Независимые компоненты ,которые можно легко заменить, слабая связаность.
    ну и минусы:
    - одному тяжело уследить за таким зоопарком )) Был бы администратор/DevOps , было бы зачительно быстрее всё.
    Ответ написан
    1 комментарий
  • .Gitignore - как исключить вложенную папку через одну?

    @lexnekr Автор вопроса
    Нашёл решение сам.

    1) исключаем папку
    admin/*

    2) игнорируем исключением дочки
    !admin/modules/

    3) исключаем содержимое дочки
    admin/modules/*

    4) игнорируем исключение дочки
    !admin/modules/name/

    ИТОГО:

    admin/*
    !admin/modules/
    admin/modules/*
    !admin/modules/name/
    Ответ написан
    2 комментария
  • Где хостится этот домен?

    RicoX
    @RicoX
    Ушел на http://ru.stackoverflow.com/
    Ничего сложного:
    Шаг 1
    nslookup moonwalk.cc
    Server:		8.8.8.8
    Address:	8.8.8.8#53
    
    Non-authoritative answer:
    Name:	moonwalk.cc
    Address: 37.220.36.3

    Шаг 2, вставляем полученную айпишку
    http://bgp.he.net/ip/37.220.36.3#_ipinfo
    получаем AS58073
    Шаг 3, смотрим на владельца автономки во всей красе
    bgp.he.net/AS58073
    Шаг 4, ура нашли хостера в Нидерландах
    www.yisp.nl

    Больше описывать как, чем искать.
    Ответ написан
    1 комментарий
  • Правильно ли понимаю полиморфизм?

    AlexanderByndyu
    @AlexanderByndyu
    IT-архитектор, эксперт в Agile&Lean
    Основаные цели при использовании полиморфизма:
    • уменьшение дублирования в коде
    • создание более "гибкого" кода


    Суть в том, что за счет абстракции вы можете передавать разные объекты в одни и те же методы, при этом вам будет не важно какой конкретно объект пришел в метод.

    Приведу пример. Представьте, что у вас есть автомойка - класс Автомойка - которая может работать только для желтой Лады Калина. Другие автомобили в ней не могут быть помыты. В классе есть метод ПомытьЖелтуюЛадуКалину(ЖелтаяЛадаКалина автомобиль). Т.е. есть конкретный метод, который принимает конкретный тип автомобиля.

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

    Вы будете добавлять новый метод каждый раз, когда будет появляться новый тип автомобиля, который вы сможете мыть. Самое главное, что каждый из этих методов будет делать практически одно и тоже. Тут у нас 2 проблемы:
    1. дублирование в методах Помыть*
    2. зависимость нашего класса Автомойка от внешнего контекста, где появляются новые типы автомобилей. При появлении нового автомобиля нам приходится модифицировать класс Автомойки (нарушение принципа blog.byndyu.ru/2009/10/blog-post_14.html)


    Какое решение? Надо выделить важные для класса Автомойка характеристика автомобиля и сделать один метод Помыть(Автомобиль автомобиль). Например, это будет высота, ширина и тип кузова автомобиля. Этого набора характеристик будет достаточно для того, чтобы помыть любой автомобиль.

    Получаем:
    класс Автомобиль
        свойство Высота
        свойство Ширина
        свойство ТипКузова
    
    класс Автомойка
        метод Помыть(Автомобиль автомобиль)
            настроитьМойкуПоВысоте(автомобиль.Высота)
            настроитьМойкуПоШирине(автомобиль.Ширина)
            настроитьМойкуПоТипуКузова(автомобиль.ТипКузова)
            начатьМойку()


    Теперь сколько бы разных автомобилей не добавлялось в систему наш класс Автомойка не будет меняться. Мы убрали дублирование и сделали наш класс более устойчивым к изменениям во внешней среде. У класс Автомобиль может быть наследник ЖелтаяЛадаКалина и у нее будут свойства/методы базового класса. Т.к. метод Помыть работает с абстракцией, то он будет вызывать полиморфные свойства/методы, ничего не зная о конкретной реализации и иерархии наследования, которая лежит под классом Автомобиль.

    При проектировании классов надо обращать внимание еще на один принцип blog.byndyu.ru/2009/10/blog-post_29.html, тогда дизайн вашей системы будет еще более гибким.
    Ответ написан
    2 комментария
  • Кто будет владельцем прототипа по завершению хакатона?

    NetBUG
    @NetBUG
    Согласен с Nidora.
    По-хорошему, у правильных организаторов есть положение о конкурсе, где такие моменты оговариваются, ровно как и обязанности и ответственности сторон.
    См., например, www.zelao.ru/hackathon/about/thesis
    Ответ написан
    Комментировать
  • Почему в PhpStorm перестает работать клавиатура?

    @Enixtux
    если проблема в ibuse можно отключить его в файле ~/xinputrc заменить run_im ibus на run_im xim
    Ответ написан
    5 комментариев
  • Не работает simple_html_dom, а именно поиск тегов. В чем проблема?

    @dani1a Автор вопроса
    Ваш вариант почему-то только все что в <head></head> выдает. Какой бы сайт не подставлял

    Вопрос решился, simple_html_dom требует mbstring.func_overload 0
    Ответ написан
    2 комментария
  • Что такое последовательности (sequences) в PostgreSQL?

    @vdem
    Sequences в PostgreSQL - генераторы уникальных последовательностей чисел, использовать можно аналогичным auto_increment полям образом в MySQL. Т.е. создаете sequence для таблицы, при вставке в нее новой записи в поле, которое должно быть уникальным (primary key) пишете значение, которое выдает sequence, созданный для этой таблицы.
    Ответ написан
    7 комментариев
  • Почему перестает работать Backbone.Router после использования histoty.pushState?

    dpigo
    @dpigo
    Front-end developer
    Сделайте пустой роут и используйте бекбоновский метод navigate для этого роута при закрытии окна.
    Ответ написан
    1 комментарий
  • Объясните что такое полиморфизм простыми словами ?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Я в шоке, если честно... Вот как ни начинаются вопросы про ООП в Javascript, так руки в ноги и понеслось... Кто Java, кто C# примеры приводит. да ещё портянками суровыми. И каждый приписку делает — дескать в Javascript не так наглядно.

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

    Спрошу всех отвечающих:
    1. Number.prototype.toString() и Object.prototype.toString() — это полиморфизм или нет?
    2. Date.prototype.hasOwnProperty() и Object.prototype.hasOwnProperty() — это наследование или нет?
    3. В чём тогда между ними разница?

    ПыСы. И ещё хочу спросить всех знатоков любых языков, кроме указанного в вопросе — если в темах с тэгами Python, Ruby, PHP, C# я начну строчить куски кода на Javascript, потому мне кажется, что так понятнее, как скоро подписанные на эти тэги попросят меня забанить?
    Ответ написан
    7 комментариев
  • Как организовать большое количество зависимостей в RequireJS?

    Faustlogger
    @Faustlogger
    Front-end developer
    Лично я описываю зависимости для модулей в конфиге на точке входа requirejs:
    index.js
    require.config({
    // Описываем пути
        baseUrl: '../js'
        paths: {
            jquery: 'libs/jquery',
            someModule: 'module'
        },
    // Описываем зависимости для модулей
        shim: {
            someModule: ['jquery']
        }
    });

    В итоге, в подключаемом модуле мне не нужно указывать зависимости
    define(function(){
        ...
        obj.someFunc = function(){
            $("#someButton").click(...)
        }
        return obj;
    });


    Проверено лично. Работает. Вот ссылка на документацию
    Ответ написан
    1 комментарий