Задать вопрос
  • Разработчик недисциплинированно трекает время. Что делать?

    Xuxicheta
    @Xuxicheta
    инженер
    Не выносить мозги разработчику своим трекингом и дать ему спокойно работать.
    Не справляется - увольняйте.
    Ответ написан
    9 комментариев
  • Как отслеживать все AJAX запросы посланные из IFRAME / перехват AJAX запросов?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Через панель Network и отслеживайте, там кроме всего прочего можно посмотреть код, который инициировал запрос. Если же нужно все программно отследить, то подменяете системную функцию на свою и уже внутри своей функции перехватываете нужные данные. Пример:
    var original = {
      open: XMLHttpRequest.prototype.open
    };
    
    XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
      console.log(url); // Получаем URL запроса
      return original.open.call(this, method, url, async, user, password);
    };
    Ответ написан
    Комментировать
  • Где найти нормальный форум сделанный на nodejs?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Ответ написан
    Комментировать
  • Как правильно выстроить разработку и деплой сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Разработка и контроль версий

    Читаем про git flow, восхищаемся и интегрируем.
    Читаем PSR-ы, восхищаемся и интегрируем. Не помешает: Попросили проверить код, на что смотреть нужно?
    Читаем про vagrant. На базе вот этого вот строим dev окружение. Можете поиграть с https://puphpet.com/. До docker все же стоит дорасти.
    Постигаем Phpstorm, и радуемся жизни.
    Можете посмотреть так же: https://github.com/index0h/php-conventions

    Тестирование

    Читаем про phpunit, восхищаемся и интегрируем.

    Документирование

    Рекомендую взять за правило: документирование алгоритмов нужно только в крайнем случае, когда используются некие хаки. Говнокод лучше переписать на что-то очевидное, чем объяснять, какая муха вас укусила и где.
    Что касается docblock-ов для помощи ide - это отличная идея.

    Деплой

    Самый простой и надежный способ: root у вашего nginx/apache указывать как ссылку на каталог текущей прод версии. При релизе - заливать код с помощью rsync в новый каталог, а далее менять ссылку на новый релиз.
    Например у вас каталог с версиями кода:
    production -> v1.0.2 - текущая версия
    v1.0.1 - старый релиз
    v1.0.2 - текущая версия
    v1.0.3 - новый релиз
    Когда подготовка завершена - вы только меняете симлинк production на v1.0.3. Если что не так - можно быстро откатиться на предыдущую версию.
    Ответ написан
    11 комментариев
  • Какие подводные камни при разработке крупного маркетплейса на vue+ssr?

    @managrib
    "Научите меня программировать?"

    Вопрос слишком общий.

    Сделать можно. Ибо vue и рожден ради крупнейшего в мире маркетплейса.
    Вопрос только в том - а способны ли вы это сделать и какие лично у вас будут косяки.
    Ответ написан
    Комментировать
  • Как развить алгоритмические навыки программирования?

    myjcom
    @myjcom
    jajabin, попробуйте использовать классический подход.
    Есть много книг по алгоритмам, обзоры/отзывы/рецензии можно найти в интернете.
    Что лучше/хуже для конкретного индивида может понять только сам индивид. Возможно вам конкретика нужна, "сколько вешать в граммах" или "ткните пальцем"
    как правильно себе построить план?

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

    5d64febe62b08896920686.png

    и Алгоритмические головоломки (немного теории и практика, практика и еще раз практика) этого же автора.

    Поллис Г., Хайнеман Дж., Селков С.
    Алгоритмы. Справочник с примерами на C, C++, Java ... (поможет понять что где когда и как применять)

    Да и еще, тут такое дело
    придется немного вспомнить математику и логику уровня старших классов школы, ну или даже 1 курса ВУЗа. Можно и без этого конечно, на уровне Грокаем алгоритмы, но тогда это уже совсем не то, скучно будет.
    Ответ написан
    1 комментарий
  • Что лучше использовать веб-разработчику: Linux Mint или Ubuntu?

    Adamos
    @Adamos
    Вы задаете вопрос, который ежемесячно обсасывается на Тостере вдоль и поперек.
    Значит, привычки гуглить и навыка читать нагугленное нет.
    Следовательно, Линукс противопоказан. Dixi.
    Ответ написан
    2 комментария
  • Как правильно использовать 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 комментария
  • Как сделать простой php маршрутизатор (роутер)?

    devg
    @devg
    I am Yenior software developer
    Очень простой роутер, не без недостатков, но довольно быстрый и легко использовать, дописывать под себя.

    <?php
    /**
     * Простой роутер
     * @devg
     */
    final class RouterLite {
    
      public static $routes = array();
      private static $params = array();
      public static $requestedUrl = '';
    
      /**
       * Добавить маршрут
       */
      public static function addRoute($route, $destination=null) {
        if ($destination != null && !is_array($route)) {
          $route = array($route => $destination);
        }
        self::$routes = array_merge(self::$routes, $route);
      }
    
      /**
       * Разделить переданный URL на компоненты
       */
      public static function splitUrl($url) {
        return preg_split('/\//', $url, -1, PREG_SPLIT_NO_EMPTY);
      }
      
      /**
       * Текущий обработанный URL
       */    
      public static function getCurrentUrl() {
        return (self::$requestedUrl?:'/');
      }
    
      /**
       * Обработка переданного URL
       */
      public static function dispatch($requestedUrl = null) {
    
          // Если URL не передан, берем его из REQUEST_URI
          if ($requestedUrl === null) {
            $uri = reset(explode('?', $_SERVER["REQUEST_URI"]));
            $requestedUrl = urldecode(rtrim($uri, '/'));
          }
    
          self::$requestedUrl = $requestedUrl;
    
          // если URL и маршрут полностью совпадают
          if (isset(self::$routes[$requestedUrl])) {
            self::$params = self::splitUrl(self::$routes[$requestedUrl]);
            return self::executeAction();
          }
    
          foreach (self::$routes as $route => $uri) {
            // Заменяем wildcards на рег. выражения
            if (strpos($route, ':') !== false) {
              $route = str_replace(':any', '(.+)', str_replace(':num', '([0-9]+)', $route));
            }
    
            if (preg_match('#^'.$route.'$#', $requestedUrl)) {
              if (strpos($uri, '$') !== false && strpos($route, '(') !== false) {
                $uri = preg_replace('#^'.$route.'$#', $uri, $requestedUrl);
              }
              self::$params = self::splitUrl($uri);
                
              break; // URL обработан!
            }
          } 
          return self::executeAction();
      } 
    
     /**
       * Запуск соответствующего действия/экшена/метода контроллера
       */
      public static function executeAction() {
        $controller = isset(self::$params[0]) ? self::$params[0]: 'DefaultController';
        $action = isset(self::$params[1]) ? self::$params[1]: 'default_method';
        $params = array_slice(self::$params, 2);
    
        return call_user_func_array(array($controller, $action), $params);
      }
    
    }
    ?>


    Пример использования:
    <?php
    // маршруты (можно хранить в конфиге приложения)
    // можно использовать wildcards (подстановки):
    // :any - любое цифробуквенное сочетание
    // :num - только цифры
    // в результирующее выражение записываются как $1, $2 и т.д. по порядку
    
    $routes = array(
      // 'url' => 'контроллер/действие/параметр1/параметр2/параметр3'
      '/' => 'MainController/index', // главная страница
      '/contacts' => 'MainController/contacts', // страница контактов
      '/blog' => 'BlogController/index', // список постов блога
      '/blog/:num' => 'BlogController/viewPost/$1' // просмотр отдельного поста, например, /blog/123
      '/blog/:any/:num' => 'BlogController/$1/$2' // действия над постом, например, /blog/edit/123 или /blog/dеlete/123
      '/:any' => 'MainController/anyAction' // все остальные запросы обрабатываются здесь
    ));
    
    // добавляем все маршруты за раз
    RouterLite::addRoute($routes);
    
    // а можно добавлять по одному
    RouterLite::addRoute('/about', 'MainController/about');
    
    // непосредственно запуск обработки
    RouterLite::dispatch();
    ?>


    UPDATE (07.08.2017):
    Дальнейшее развитие данного роутера см. в проекте Litero (https://github.com/bit55/litero)
    Ответ написан
    1 комментарий
  • Кто как делает html формы?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Современная форма - это комплекс решений, в разных областях. И поставить один модуль который решит проблему - не возможно в принципе. Каждый специалист может собрать свою часть. Но без архитектора который скажет как это скрутить в кучу, будет велосипед с квадратными колесами - ехать можно но по специальной дороге.

    1. Разметка:
      • пишу всегда вручную;
      • длинные селекты тянутся из базы посредством шаблонизатора (например серверного TWIG);
      • прописываю полностью с атрибутами валидации HTML5 (благо все современные браузеры потдерживают);
      • выдумывать JS-велосипеды для валидации не стоит уже давно;
      • для зависимых полей пока есть простой js-клаcс сверяющий их.
      • drag&drop файлов давно уже работает без JS;
      • для подгрузки изображений в страницу на стороне клиента js-класс.

    2. Стили:
      • один раз прописаны стили для разных-форм на уровне тегов и взаимоотношений тегов (в итоге все формы на сайте виглядят в одном стиле);
      • класы только для самой формы, определяет как одна выводится: локально, модально или в теле контента;
      • кому сложно написать 300 строчек CSS, пользуйтесь фреймворками;
      • ни в коем случае не делайте стили форм для каждого раза как онные встречаются (придет дядя даст по рукам :) ).

    3. Отправка:
      • пользуйтесь action, submit и target;
      • нужны данные как модальное окно есть iframe;
      • ajax с формами не использую он изначально предназначен для другого:
        • для подгрузки полей в селектор, но только если селектор очень большой;
        • для поиска налету.


    4. Сервер:
      • использую специальный статический класс, который делает валидацию и XSS/injection-очистку;
      • как минимум PDO с подготовленными запросами;
      • Doctrine;

    5. База-данных:
      • наименования полей в базе соответствуют наименованиям полей в формах (с префиксом);

    Ответ написан
    1 комментарий
  • Нужен совет по направлению развития начинающего программиста?

    Любой проект себе придумываешь, хоть даже состоящий из 25 строк кода, и допиливаешь его на все 100%, чтобы все работало с любыми входными параметрами. Рассчитывай на то, что твою программу будет использовать какой-нибудь ламер, который первый раз увидел компьютер. Ведь если сможешь реализовать 1 проект на все 100%, то реализовывать следующие будет не проблема, и при этом будешь накапливать опыт программирования, развивать логику и т.п.

    Пример: возьми какую-нибудь формулу, например формулу по высчитыванию суммы чисел от 1 до 100.
    Sum = n(a + b) / 2
    n - кол-во чисел, которые будут суммированы.
    a - первое число при сложении.
    b - последнее число при сложении.

    Sum = 100(1 + 100) / 2

    И попробуй полностью реализовать в видео консольной программки/страницы на сайте/GUI интерфейса.

    Пользователь вводит 1, дальше 100 и по формуле выше высчитываешь результат. Главное чтобы при любых входных данных от пользователя программа вела себя адекватно.
    (Это чисто пример, и написать особого труда не составит)

    В общем тупо придумывай себе программки и реализуй.
    Ответ написан
    1 комментарий
  • Как написать свою библиотеку на JS?

    RubaXa
    @RubaXa
    Прежде чем начать что-то писать, особенно библиотеку, начните с организации инфраструктуры:
    • Система сборки проекта (grunt, gulp, webpack и т.п.)
    • Code style (JSHint, ESHint, JSCS или другие)
    • Тесты и контроль покрытия (QUnit, Karma, Mocha, Istanbul и т.д.)
    • На чем писать (JS, CS, TS или ES6/Babel)
    • Автоматизация контроля изменений
    • Документирование кода и документация (JSDoc3 или JSDuck)
    • Способ распространения (github, bitbucket и т.п.)
    Ответ написан
    Комментировать
  • Как правильно написать запрос sql для вывода данных из 2х таблиц?

    LINKeRxUA
    @LINKeRxUA
    web dev
    Ваши таблицы не отвечают даже первой нормальной форме!
    Лучше привести к такому виду:

    stuff //товары                banner
    id| price| ... и т.д.            id|width|height| ... и т.д.
    |                                 |
    |      stuffToBanner              |
    |____stuffID | bannerID___________| // и эта комбинация должна быть PK,
    // FK на "stuff.id" и  FK на "banner.id"


    Тоесть есть:
    товары с ID, 1,2,3,4,5,6,7,8,9,10
    баннеры с ID, 1,2

    и связная таблица
    stuffID, bannerID
    1,1
    1,2
    3,1

    Тогда по INNER JOIN можно очень быстро определить что выводить, а что нет
    Ответ написан
    Комментировать
  • Какие задачи нужно уметь выполнять на JS начинающему?

    copist
    @copist
    Empower people to give
    Какие задачи нужно уметь решать на чистом JS, перед тем как переходить к изучению библиотек и фреймворков?


    Кроме синтаксических конструкций, математических и логических выражений, нужно знать:
    • Область видимости переменных
    • Замыкания
    • Объектно-ориентированное программирование, в частности наследование через прототипы
    • Шаблон проектирования "модуль"
    • Операции над DOM
    • Понимание принципов событийно-ориентированного программирования
    Важно - нужно знать, откуда копипастить.
    Тебе нужно быть очень хорошо знакомым с одной-двумя-тремя популярными библиотеками на JavaScript. В идеале ты должен иметь представление о том, что определённый класс задач может быть решен с помощью определённых библиотек, хотя бы одной, но такие знания приходят с практикой. Вообще ты должен быть знаком с ними так близко, чтобы помнить, в какой части мануала по библиотеке можно найти описание форматов входных данных нужной тебе функции и какой будет результат, чтобы скопировать и вставить в свой код, а потом поправить, чтобы работало.

    Важно - инструменты программиста JavaScript
    У тебя должен быть удобный инструмент для разработки (IDE, Integrated Development Environment), чтобы он тебе подсвечивал код (syntax highlight) и подсказывал о синтаксических ошибках (syntax check), о формальных параметрах функций (type hinting), о стиле кодирования (code style), помогал писать код (live templates).
    Ты должен знать, как отлаживать скрипты в популярных браузерах (Firebug, Chrome Developer Tools и другое). Что такое точки останова, как управлять исполнением во время останова, как посмотреть и поменять содержимое переменных, как настроить останов по условию.

    Хотелось бы узнать что это за задачи(упомянутые вами 80%)


    Реальные задачи джунов:
    1. Возьми из сборника задач по javascript любой скрипт случайно и вслух расскажи, что он делает.
      Важно - читать и понимать чужой код намного важнее, чем писать свой. И на работе тебе это приддётся делать чаще, чем ты думаешь. Чтобы подключить к своему проекту чужую JS либу, нужно понимать что она делает, как она конфигурируется, как управлять её поведением. Скажу точно, что написать свой скрипт, который строит графики, намного сложнее, чем понять, как настраивается highcharts.

    2. Напиши скрипт на JS, который в заданном тексте удалит один или два символа, выбранных случайно
      1. Усложнение: удалять можно только буквы в словах, а знаки пунктуации и цифры удалять нельзя
      2. Усложнение: принять, что этот текст является программной на Javascript, удалить одну-две команды JS, но только если они не в строковых литерах (break как команду удалить можно, а в строке "break my heart" нельзя)
      3. Усложнение: воспользуйся этим скриптом и "попорти" код какого-нибудь другого скрипта на Javascript, а потом отладь, найди ошибку и восстанови работоспособность
      Важно - этим обычно все и занимаются - ищут баги. Только в реальной жизни они и без этого скрипта появляются. И не по одному, а прям пачками.

    3. На страницу HTML нужно встроить график курса доллара по отношению к рублю. Формат входного массива значений курса определи сам, исходя из своего скрипта для построения графиков.
      1. Усложнение: на одном графике должны быть два курса, по разным шкалам. Наприме, курс доллара к евро и курс юаня к рублю
      2. Усложнение: первоначально график вывести в детализации по месяцам, но чтобы можно было "приблизить" (drilldown) детализацию до дней
      3. Усложнение: первоначально график вывести текущем месяце, но чтобы можно было загрузить данные для предыдущего месяца без перезагрузки страницы (AJAX)

    4. При клике по картинкам, вставленным в текст HTML, показывать всплывающее окно для просмотра увеличенной картинки.
      1. Усложнение: в всплывающем окне сделать навигацию по картинкам, вперёд/назад и к нужной картинке
      2. Усложнение: в всплывающем окне вместо картинки показать видео-ролик с Youtube
      3. Усложнение: в всплывающем окне показать текст HTML

    5. По клику на кнопку "Click me" показать всплывающую форму.
      1. Усложнение: реализовать проверку данных на корректность перед отправкой формы (непустое значение, минимальное количество символов, максимальное количество символов, минимальное числовое значение, максимальное числовое значение)
      2. Усложнение: если в значении текстового поля встретилась гиперссылка, то считать её за 22 символа при любой длине этой ссылки (как в твитере)
      3. Усложнение: реализовать отправку формы на сервер через AJAX, без перезагрузки страницы
      4. Усложнение: саму форму в виде HTML загрузить с сервера через AJAX, в момент клика по кнопке "Click me", правила проверок данных должны как-нибудь "извлечься" из самой загруженной формы, например из аттрибутов полей ввода

    6. К форме ввода данных на поле ввода даты "навешать" всплывающий календарь для выбора даты.
      1. Усложнение: сделать форму календаря мультиязычной. Хотя бы через настройки на том же JavaScript
      2. Усложнение: сделать так, чтобы с помощью календаря можно было выбрать диапазон дат, чтобы она была привязана к двум полям формы "дата начала" и "дата окончания", и чтобы значение в поле "дата начала" обязательно была меньше чем в поле "дата окончания"
      3. Усложнение: сделать так, чтобы с помощью в календаре можно было видно визуально этот диапазон
      4. Усложнение: диапазон может быть открытым, но не пустым, то есть пользователь должен задать хотя бы дату начала или дату окончания.

    7. Сделать пред-просмотр веб-страницы HTML с разными темами. Тему страницы выбирать через селектор на javascript, а показывать в фрейме.
      1. Усложнение: сделать селектор "тип устройства", чтобы менять размер фрейма (например, "iPhone 5c 1136x640") и "чекбокс" для смены ориентации страницы "горизонтальная" или "вертикальная" (соответственно 1136x640 или 640x1136)
      2. Усложнение: в селекторе тем предусмотреть поиск тем по подстроке, и аналогично поиск устройств по части названия (авто-дополнение, auto-complete)
      3. Усложнение: тема страницы должна меняться без перезагрузки фрейма



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

    2. Реализовать однопользовательскую браузерную игру "змейка", "тетрис", "найди пару"
    3. Реализовать многопользовательскую браузерную игру "крестики-нолики", "морской бой" на два игрока в режиме "hot seat"
      1. Усложнение: два игрока на разных компьютерах, ходы передаются по websocket
      2. Усложнение: ограничение на ожидания окончания хода 15 секунд, по окончании ожидания автоматически делается случайный ход

    4. Реализовать todo-list. Пользователь вводит список, затем он превращается в строки с "чек-боксами". Когда "чекбокс" включен, строка зачёркивается.
      1. Усложнение: пользователь может переименовывать, удалять, добавлять строки
      2. Усложнение: список хранить в localStorage браузера, чтобы при перезагрузке страницы он восстанавливался
      3. Усложнение: пользователь может иметь несколько независимых списков todo

    5. Реализовать простой графический редактор. Пусть рисуется точка в месте, где пользователь кликнул.
      1. Усложнение: добавить переключатель режимов "точка"/"линия", в режиме "линия" рисуются линии между двумя последовательно кликнутыми точками
      2. Усложнение: можно менять толщину, цвет линий, размер точек
      3. Усложнение: последовательность кликов можно воспроизвести ещё раз с самого начала, равномерно или с реальной задержкой между кликами, с обычной скоростью или ускоренно
      4. Усложнение: можно выгрузить получившийся рисунок в формате PNG или SVG, причём SVG c анимацией воспроизведения



    Можно использовать любую существующую библиотеку.
    Например,
    для построения графиков www.highcharts.com
    для загрузки и передачи данных через AJAX: jquery.com + что-нибудь на сервере
    для всплывающих диалогов с картиками, видео и формами: fancyapps.com/fancybox и https://jqueryui.com/dialog/
    для валидации форм rickharrison.github.io/validate.js
    для календаря https://jqueryui.com/datepicker/
    для автодополнения https://jqueryui.com/autocomplete/
    для передачи данных между несколькими пользователями socket.io или обычный AJAX
    Ответ написан
    16 комментариев
  • Почему при обновлении имени файла css, у старых пользователей сайта при первом заходе всё равно грузятся старые css?

    @Pavel242
    Кеширование всему виной. Если не хочется возится с версиями после имени файла, как посоветовали выше, то можно просто добавлять дату модификации. В php можно воспользоваться filemtime()

    <link rel="stylesheet" href="style.css?201507271028" />
    Ответ написан
    Комментировать
  • Какими бесплатными стоками вы пользуетесь для поиска иконок, фото и элементов интерфейса?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    лидер - www.freepik.com/, у него много эксклюзива, а не как у других- сборники со свалок в сети

    по иконкам - от него же www.flaticon.com

    еще есть всякие all-free-download.com, но там мутнее с лицензией

    из относительно бесплатных рекомендую www.kozzi.com ( коззи скис, остался graphicstock.com, на него надо подписаться мылом и потом ловить акции на дешевую годовую)
    Ответ написан
    Комментировать
  • Не могу найти работу стажёром?

    v_sadist
    @v_sadist
    DevOps engineer
    Много бессмысленной грубости в треде. Как будто все с 5+ опытом программирования родились и вопросов глупых не задавали никогда.
    Топик стартер по вашему вопросу:
    "На сайт объявлений в разделе резюме добавил своё резюме ."
    Только на один? Позаливайте везде, чтобы на хх, кареер.ру, работа,ру и тд висело ваше резюме. Не забывайте про узкоспециализированные "Мой круг" (быв. Брэйнсторадж), и итмозг.

    "Заполнил должность , возраст , пол и т.д в разделе "Дополнительная информация:" написал : Хочу набраться опыта. Владею Html, css(bootstrap), javascript(jquery, ajax), php, Mysql ,Sql, ООП и MVC."
    Уберите отсюда "Хочу набраться опыта". Вы же не за еду работать будете, так?

    "Eсть опыт работы с разнообразным ПО. Указал свой номер телефона и скайп чтобы со мной могли связаться ."
    Опишите "опыт работы с разнообразным ПО". Строчка откровенно глупая. Вы умеете работать с Оракл и фотошопом? с Маткадом и вордпрессом? Что значит "разнообразное". Эта строчка очень портит ваше резюме, лучше напишите "есть опыт с soft1, soft2, soft3, да попродробнее - что конкретно делали с каждым продуктов.

    "Но уже как месяц ко мне не кто не звонит и не пишет, просмотры вроде есть. В разделе вакансии везде требуют опытных программистов."
    Если бы меня спросили, хочу ли я зеленого инженера или опытного, я бы сказал - опытного.
    1) Месяц - это не так много. В стране кризис, сокращения, текущие вакансии замораживают, новых не открывают, набор не увеличивают.
    2) Вы ИТшник. Будет мужиком, вычеркните из своего лексикона слово "вроде" и "наверное". Это я к "просмотры вроде есть". Я занудничаю по этому слову, потому что из вашего вопроса кажется, что вы растеряны и/или напуганы отсутствием предложений о работе. Бояться нечего. Хороший специалист без работы не останется, но если вы будете на собеседовании "мямлить" и на вопрос "работали когда-нибудь с фронтендом", ответите "вроде да"... Результат собеса вы знаете :) Вы круты. Вы знаете столько всяких штук (я напр. из всего этого только мускуль знаю, и то как админ). Все будет хорошо.
    3) Один из отвечающих уже сказал, что направление популярное, конкурс большой. Готовьтесь уничтожать конкурентов и пожирать их сердца на глазах рекрутеров.

    "Что я не так делаю ? стоит ли звонить на прямую в разные компания чтобы узнать нужен ли стажер ?"
    1) Оформите резюме согласно моим комментариям и комментариям других отвечающих
    2) Соберитесь. У вас есть кадык, так докажите право его иметь.
    3) Если вы из мск/питера/любого другого города, где есть представительства крупных софтверных контор и интеграторов, то
    а) отправьте туда свое резюме (если вакансий подходящих нет)
    б) найдите номер телефона ХР, позвоните и скажите "я вот вам сивишечку отправил, у вас есть что-то релевантное моим навыками?"
    Если да - то договаривайтесь о собеседовании, проходите, начинайте работать
    Если нет - попробуйте поискать удаленную работу.

    Вы хотите работу? Вы берете и ищете. В своем городе или нет. Удаленно или нет. Не хватает навыков? Учитесь. Проблемы с языком? Учитесь.

    Все получится. Удачи.
    Ответ написан
    Комментировать