• Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    Все красиво объяснил Nkly777, только в блоке PS merge с rebase перепутаны.
    Добавлю картинок.

    git rebase devel - собачка на молнии - "сшивает" коммиты по дате их создания
    (ветка devel "растворяется" в основной ветке)
    518b8dbce1cd4f96b30de9782ae38fcd.png
    git merge devel - пожарная лестница, все коммиты ветки devel крепятся в конец, образуется пересечение
    (devel остается отдельной веткой, к которой можно вернуться)
    1ba8186d879d46ff85ea7c1e192328e2.png
    git chery-pick idea - забрать коммиты из ветки idea
    2717e3091f644ef2954aa2de4514f446.png
    Ответ написан
    2 комментария
  • Git: объясните «на пальцах» разницу между rebase и cherry-pick?

    @Nkly777
    git chery-pick - ты забираешь комиты из одной ветки в другую, это бывает полезно когда изменения сделаные другим разработчиком в его ветке, прямо сейчас нужны тебе в твоей ветке, и что бы не писать этот код заново, ты забираешь его комит себе в ветку

    git rebase master - ты синхронизируешься с главной веткой в которую коммитят все разработчики проекта, это полезно когда кто-то изменил участок кода с которым ты сейчас работаешь в своей ветке, дабы через неделю ты смог без проблем смержиться с master веткой. Обычно делается каждое утро перед началом рабочего дня и в конце когда фича готова.

    git merge - обычно используется когда у вас 2 и более master ветки (к примеру master и prototype) в этих ветках очень много комитов (и rebase здесь не подходит) и обчно через пару недель, maintainer репозитория наработки из prototype ветки "сливает" в master ветку по средствам этого самого git merge

    P.S. Что бы легче предствить разницу между git merge и git rebase. Представь что merge как собачка на молнии у одежды - "сшивает" комиты по дате их создания.
    В то время как git rebase как пожарная лестница - при применении твои коммиты крепится на конец родительской ветки

    git merge используйте для мержа фич и фиксов в master ветку (как и делает это Github)
    а git rebase используется для своей ветку в которой вы работаете над фичей что бы забрать последние изменения с master ветку (для этого есть очень удобная команда `git pull --rebase origin master`, аналог 3х команд (`git checkout master; git pull origin master; git checkout mybrach; git rebase master`)
    Ответ написан
    2 комментария
  • В чем суть роутера на php?

    onqu
    @onqu
    weasy
    1. Здесь пугают всякими контроллерами, ларавелями. Давайте жить проще. Для начала дадим определение модному слову роутер. Это маршрутизатор. Что делает маршрутизатор? Правильно. Обрабатывает маршруты, являясь связующим звеном. Маршрутом для web сайта принято считать метод запроса [GET, POST, PUT и другие] и компоненты URI.

    например: https://ru.wikipedia.org/wiki/URI?foo=bar#title
    [схема: https] :// [источник: ru.wikipedia.org] [путь: /wiki/URI] [запрос: ?foo=bar] [фрагмент: #title]


    Но для определения маршрута может браться любая другая информация передаваемая серверу, определение выше это лишь наиболее употребляемые параметры.

    Сама работа, как правило проста: от клиента приходит запрос, маршрутизатор перебирает все заданные ему пути до первого совпадения. При совпадении вызывается определенная вами функция, которая возвращает ответ клиенту.

    2. Он необходим, если в приложении одна точка входа, когда любой запрос приходит на один файл.

    3. Простой пример
    // файл index.php
    
    // Маршруты
    // [маршрут => функция которая будет вызвана]
    $routes = [
        // срабатывает при вызове корня или /index.php
        '/' => 'hello',
        // срабатывает при вызове /about или /index.php/about
        '/about' => 'about',
        // динамические страницы
        '/page' => 'page'
    ];
    
    // возвращает путь запроса
    // вырезает index.php из пути
    function getRequestPath() {
        $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    
        return '/' . ltrim(str_replace('index.php', '', $path), '/');
    }
    
    // наш роутер, в который передаются маршруты и запрашиваемый путь
    // возвращает функцию если маршшрут совпал с путем
    // иначе возвращает функцию notFound
    function getMethod(array $routes, $path) {
        // перебор всех маршрутов
        foreach ($routes as $route => $method) {
            // если маршрут сопадает с путем, возвращаем функцию
            if ($path === $route) {
                return $method;
            }
        }
    
        return 'notFound';
    }
    
    // функция для корня
    function hello() {
        return 'Hello, world!';
    }
    
    // функция для страницы "/about"
    function about() {
        return 'About us.';
    }
    
    // чуть более сложный пример
    // функция отобразит страницу только если
    // в запросе приходит id и этот id равен
    // 33 или 54
    // [/page?id=33]
    function page() {
    
        $pages = [
            33 => 'Сага о хомячках',
            54 => 'Мыши в тумане'
        ];
    
        if (isset($_GET['id']) && isset($pages[$_GET['id']])) {
            return $pages[$_GET['id']];
        }
    
        return notFound();
    }
    
    // метод, который отдает заголовок и содержание для маршрутов,
    // которые не существуют
    function notFound() {
        header("HTTP/1.0 404 Not Found");
    
        return 'Нет такой страницы';
    }
    
    
    // Роутер
    // получаем путь запроса
    $path = getRequestPath();
    // получаем функцию обработчик
    $method = getMethod($routes, $path);
    // отдаем данные клиенту
    echo $method();


    На практике используют более сложные маршрутизаторы, у которых гораздо большие возможности.

    4. Обойтись без него можно. Если каждая страница в вашем приложении будет являться отдельным файлом, который отвечает за отдачу информации.
    index.php
    about.php
    contact.php
    ...


    Это олдскульная структура, в новых проектах почти не применяется.
    Ответ написан
    13 комментариев
  • Каким должен быть контрольный список знаний для Junior PHP(2016)?

    Uwe_Boll
    @Uwe_Boll
    Я Злой и Страшный Уве Болл в Разработке знаю Толк
    где компилятор?
    7112_20.jpg
    Ответ написан
    Комментировать
  • Как правильно управлять парком серверов Unix?

    @ProFfeSsoRr
    Сис.админ по Linux
    Могу только своим опытом поделиться: во-первых избавится от зоопарка дистрибутивов. На каком именно остановится - это уже каждый под себя решает, но главное - выбрать один. Далее локальный репозиторий сделать, если это rolling release дистриб, да даже если и нет, а просто много машин - с локального будет в разы быстрее. Ну а потом уже через Ansible все автоматизировать. Разумеется сначала на тестовой виртуалке тестить обновление, потом уже раскатывать на продакшен. У меня вот, по сути, есть десктоп-линукс (на всех десктопах конторы одинаков, соответственно и у меня на компе виртуалка с точно такой же системой, на которой проверяю обновления), есть базовый серверный шаблон (с которого все виртуалки серверные и создаются), его тоже копия на виртуалке есть и тестирую на ней. Ну а специфичные серверы только клонированием виртуалки и проверкой обновлений на ней.
    Таким образом у тебя всегда система везде стоит, про которую ты сам уверен, что она рабочая и нет подводных камней вида "вот тут дистрибутив один, а тут другой". У меня несколько сервисов на php например, вот вышел php 7 - все эти машины склонировал, протестировал, программисты все поправили - я на все машины в продакшене php 7 накатил за 1 раз. И т.д. и т.п.
    Учетки через LDAP, Samba-то зачем, когда Линукс? Просто один LDAP и все.
    Про политику безопасности - это виндовое понятие, в линуксе по-другому слегка. Конфиг везде через ansible обновил и все, если он где-то вдруг его не смог поменять - он ж напишет об этом. Но если ты вначале позаботился и зоопарк дистрибутивов устранил - все будет четко работать в будущем, без головняков.
    Ответ написан
    Комментировать
  • С чего начать изучение Linux?

    Olej
    @Olej
    инженер, программист, преподаватель
    С чего начать изучение Linux?

    1. Есть один отличный, но секретный ;-) способ изучить Linux - снести все Windows чтобы в доме не было ни одного экземпляра. Очень быстро просветляет!

    2. Пробегите бегло: Разработка программных проектов в Linux - там есть кой-чего и для вас.

    3.
    что конкретно значит "засрать себе /home"

    Это всё вы узнаете сами без всяких учебников ;-)
    Ответ написан
    Комментировать
  • Закончилось место на диске. Как определить где именно причина?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    попробуйте для начала du -hs /*
    Ответ написан
    Комментировать
  • Можно ли по IP узнать что люди сидят в одной локальной подсети?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    По IP никак нельзя.
    Если люди заходят через nat или proxy, вы будете видеть только IP их сервера, и для вас это будет один IP для всех. Вы даже не сможете отличить, это один человек заходит разными браузерами, или разные люди с разных компов.
    Ответ написан
    Комментировать
  • Как максимально быстро узнать IP для множества доменов?

    martin74ua
    @martin74ua
    Linux administrator
    распарралелить проверку?
    Ответ написан
    Комментировать
  • Какой дистрибутив выбрать?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Второй вопрос у вас, и снова все проблемы из-за недостатка потраченного времени.
    Любой дистрибутив Линукса сейчас ставится элементарно.
    Тонкая подстройка что Линукса что Виндовс это годы опыта.

    Попробуйте разобраться почему именно вам так быстро надоедают операционные системы. Недостаток усидчивости и желания разобраться почему не работает выйдет боком, если вы действительно хотите работать в IT.

    Debian, Ubuntu, Arch - все дистрибутивы проверенные и отлично работающие. Кроме того, настройка дистрибутива и программирование несколько разные вещи - администраторы и девелоперы очень разные направления в IT, поэтому непонятно как может операционная система надоесть. Программист вообще по большей части сидит в какой-нить IDE, а операционную систему один раз поставил и забыл.
    Ответ написан
    Комментировать
  • С чего начинать проектировать приложение?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Предположим, что с будущей функциональностью Вы определились. Тогда Вы точно знаете, кто или что будет поставлять данные, и кто/что будет их потреблять.

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

    Теперь нарисуйте под каждым нарисованным сверху субъектом прямоугольник с названием UI или API - это интерфейсы, к которым будет обращаться пользователь или внешняя управляющая система. Иногда UI тоже может обращаться к API. Объедините все прямоугольники с UI одним контуром и обзовите слоем UI. Объедините все прямоугольники с API и обзовите слоем сервисов.

    Для систем, нарисованных снизу, укажите компоненты, которые будут отвечать за доступ к этим системам. Объедините все эти компоненты одним контуром и обзовите слоем доступа к данным.

    Между слоем сервисов и слоем доступа к данным нарисуйте большой контур и назовите его слоем бизнес-логики. В маленьких прямоугольниках внутри этого контура перечислите основные бизнес-задачи. Один компонент Вашей системы будет решать одну бизнес-задачу.

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

    Получите логическую архитектуру. Разбросайте слои по серверам - получите физическую архитектуру.

    А дальше - детально прорабатывайте каждый маленький квадратик. Всё.
    Ответ написан
    2 комментария
  • Стоит ли писать DLL библиотеки на Eclipse С++?

    Nipheris
    @Nipheris Куратор тега C++
    На мой взгляд вы смешиваете в одном вопросе предпочтения в выборе IDE и технические детали реализации динамически загружаемых модулей на конкретной платформе (Windows). Конкретных супер-преимуществ для разработки именно DLL вам никакая из известных мне IDE вам не даст, да они и не особо нужны - гораздо важнее адекватная поддержка со стороны тулчейна (компилятора, линковщика), т.к. для программиста все сводится к паре макросов для корректного экспорта/импорта нужных функций. Касательно компиляторов - не считая "родного" майкрософтовского cl в составе студии, тот же MinGW отлично собирает DLL на винде. Так что озаботьтесь лучше выбором тулчейна/-ов для вашего проекта под нужные вам платформы, ну и поддержкой самого С++ в IDE (подсветка, автодополнение и т.д.). То что во всех статьях по DLL упоминается студия вполне логично - поставлена платформозависимая задача ("написать DLL") - дано платформозависимое решение (берем родной для платформы компилятор и делаем проект по шаблону).
    Ответ написан
    1 комментарий
  • Как реализовать установку одинаковых программ на нескольких компьютерах?

    vvpoloskin
    @vvpoloskin Куратор тега Компьютерные сети
    Инженер связи
    И как же вы собираетесь шарить файлы между компьютерами без сети? Через голубей?
    Ответ написан
    Комментировать
  • Как ускорить выполнение SQL запроса?

    Таблица по status проиндексирована?
    Ответ написан
    Комментировать
  • Прокси (squid) как контролировать трафик пользователей (когда все печально)?

    1nn0
    @1nn0
    Системный администратор\Фрилансер
    Этот ответ просто концепт и мое ИМХО. И, к сожалению, охватывает только ПК пользователей.
    Судя из описания ситуации и отсутствия желания\возможности поднять АД у ТС, предлагаю следующую идею:
    1) Заворачиваем 80й порт на некую локальную страницу (да на том же пфсенс). 443 порт блочим для LAN.
    2) На страничке выкладываем краткое описание почему юзер на этой странице, а не разглядывает котиков.
    3) На этой же страничке размещаем ссылку на bat-ничек или ps-ничек в котором мы прописываем в систему наш прокси и инструкцию (Скачайте, запустите, смотрите на котиков)
    4) ...
    5) PROFIT!
    Да, это колхоз. Да это не полное решение (мобильные устройства). Но у уважаемого ТСа 150машин без АД - колхоз еще тот, ИМХО. И если предположить, что это одна организация, ладно не буду дальше развивать тему, ситуации и оснащение бывают разные, как и начальство. Другое дело, если это шлюз для БЦ эконом класса, и 150 машин - это 20-30 фирм. Очевидно, что внедрять АД не имеет никакого смысла, но так же не имеет смысла и ограничивать юзеров в посещаемых ими ресурсах (максимум шейпер канала по фирмам), т.к. задача предоставлять доступ.
    P.S.: Это не глум или стеб над вопросом. Просто идея максимально бюджетно по времени, и в то же время эффективно (читай - радикально), решения для данного вопроса.
    Ответ написан
    1 комментарий
  • Как создать скрипт для cron чтобы из папки удалять файлы созданные более месяца назад?

    @hiloader
    find /path/to/ -type f -mtime +31 -delete
    Ответ написан
    Комментировать
  • Какую базу данных лучше использовать в java?

    @mayorovp
    Популярные СУБД - это SQL Server, Oracle, Postgres и MySql.

    Но первая СУБД - не кроссплатформенная, вторая - платная, последняя - must die.
    Поэтому я бы советовал использовать Postgres.
    Ответ написан
    Комментировать
  • Какую базу данных лучше использовать в java?

    kivsiak
    @kivsiak
    software engineer
    Если это не встроенная база, то вопрос не имеет смысла. Выбор базы не от языка а от задач зависит.
    Ответ написан
    Комментировать