• Есть ли данные о эффективности Agail?

    @zloy_zaya
    Agile будет работать в случаях, когда в проекте нужна гибкость. Когда вы и заказчик готовы жертвовать сроками и деньгами в пользу ультимативного результата. Когда вы готовы менять продукт на лету и получаете продукт мечты. Вы можете продемонстрировать кусочек продукта в конце каждого спринта.
    В этом случае waterfall просто не работает. Вы теряете один таск - и весь проект летит в тар тарары.
    В Waterfall нужно просто идти шаг за шагом и строго придерживаться сроков. Например, в самолетостроении и космических технологиях. Вы не можете прикрутить к самолету крыло не имея фюзеляжа.
    Тот же Сазерленд называет эти отрасли неприспособленными для Agile. Почитайте его, он очень хорошо и доступно пишет об Agile, у Вас, вероятно, появится понимание о том, что это за зверь.
    Ответ написан
  • Есть ли данные о эффективности Agail?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Если вы хотите двойное слепое рандомизированное плацебоконтролируемое исследование на тему эффективности применения Agile, то таких нет.
    А вообще, неплохо бы привести пример "серьезных научных исследований" других методов разработки продукта, например водопада или канбана или еще чего, чтобы было понятно что вы хотите.

    Вокруг этого подхода действительно много шума и бесполезной/неверной информации, много примеров неудачного применения, но это не значит что это фуфло какое-то.

    Сам я несколько раз пробовал работать по этой методологии и так и не понял какие задачи она решает.


    Надо делать в обратном порядке - сначала испытать проблемы которые она может решить, потом разобраться как это делать, потом пробовать.

    Более того в компании в которой работал от Agail отказались и неожиданно получили прирост в производительности.

    И это нормально - может там не было тех проблем на которые нацелен Agile. Можно попробовать молотком забивать шурупы, потом отказаться в пользу ответрки и получить прирост производительности, но это не значит что фраза "молоток - хороший инструмент" это маркетинговый буллшит и надо искать научные исследования на тему молотка. Надо сначала понять как применять молоток правильно и есть ли у вас вообще гвозди которые надо забить. А то может у вас все на болтах там.
    Ответ написан
  • Как поставить KPHP и KDB?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    LinuxGod, PHP 7.x по скорости будет сопоставим с любым из имеющихся веб языков, как альтернатива kphp - phalcon php project - попытка создать модули mvc модели на более быстром Си, однако, не смотря на плюшки в виде более-менее вменяемого ооп и нормального мвц, тоже имеет ряд проблем. В частности надо будет от души потанцевать с бубном вокруг установки этой вундервафли и более-менее свежих либ под нее. В итоге на данный момент пхп 7.х вполне сопоставим по скорости исполнения чистого пыхового кода с фалконовскими сишными модулями.
    Вывод - на сегодня нет смысла юзать неподдерживаемое / малоиспользуемое гуано, когда нативный пых в принципе не сильно отстает, кроме того в вебе 99% задержек и тормозов СОВСЕМ не относятся к исполнению чистого кода, большую часть времени пых простаивает в ожидании запросов к бд и файловой системе.
    Ответ написан
  • Почему пустой вывод в PDO запросе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что плейсхолдерами можно подставлять только значения, а не имена таблиц или полей.
    Ответ написан
  • Сквозное преобразование массива?

    0xD34F
    @0xD34F
    преобразовать
    ['a' => [11, 12], 'b' => [21, 22]]
    в
    [['a' => 11, 'b' => 12], ['a' =>21, 'b' => 22]]

    Совершенно не очевидно, почему результат должен быть таким, как вы показали. Почему 12 из a становится значением свойства b, а 21 - наоборот? Опечатка? - наверное, в a исходного массива лежат значения свойств a результата, аналогично и с b.

    array_map(fn($i) => array_combine(array_keys($arr), array_column($arr, $i)), array_keys(array_values($arr)[0]))
    Ответ написан
  • Как изменить цветовую схему в phpStorm?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Фон выделенных текстовых фрагментов един: Editor → General → Selection background
    Ответ написан
  • Какой есть буржуйский ресурс с адекватной аналитикой для выбора востребованного языка/платформы для изучения?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    как я вижу, веб-разработка, в качестве ремесла, неуклонно загибается.

    Только если для вас веб-разработка - это натягивание шаблонов на wordpress. Почти все enterprise-системы сейчас имеют web-интерфейс и многие из них сейчас строятся на микросервисах - а это тоже web. Так что web не только не умирает, а захватывает другие сферы программирования, активно выдавливая например десктопную разработку.

    Работать и изучать приходится всё больше, а платят всё меньше.

    Web-разработчики интернет-банкинга, например, сильно не понимают, о чём вы.

    Нужен какой-то ресурс, с нормальной взрослой аналитикой, на основе которого можно принять решение о том, что именно сейчас наиболее востребованно, и более-менее устойчиво.

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

    Грубо говоря: что сейчас стоит начать учить, чтобы через полгода был вал заказов и море бабла? ))

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

    Где сейчас бум идет, или намечается?

    Если кто-нибудь сейчас напишет точный ответ на этот вопрос, то в этой сфере мгновенно окажется огромное количество конкурентов, чудовищным образом сбивающее цены.
    Ответ написан
  • Как для репозитория создать домен на github.io?

    miraage
    @miraage
    dev
    А как можно создать REPOSITORY.github.io без создания организации или нового пользователя с названием равным репозиторию?

    Никак.
    Ответ написан
  • Как скачать файл через командную строку в линуксе?

    Попробуйте начать скачивать в браузере, и в инструментах разработчика, вкладка Network в FireFox если кликнуть правой кнопкой на закачке этого файла, есть пункт Copy – Copy as cURL:
    5e4446f6902f1091091106.png

    Скопированная команда включает все правильные заголовки, куки и пр.
    Не забудьте направить вывод команды в файл, иначе на экран повалится нечитабельная бинарная каша.
    Допишите к команде знак «больше» и имя файла, куда сохранять: curl -всякие опции и ссылка > file.zip

    Должно сработать из командной строки, если только куки не привязаны к IP закачивающего.

    Если привязаны к IP
    В таком случае придётся сделать SSH-тоннель через сервер, и использовать его как SOCKS5 прокси для браузера, чтобы зайти и авторизоваться через нужный IP.

    На маке это в терминале команда ssh -ND 5555 my_ssh_host_config_name где в файле ~/.ssh/config указан конфиг хоста:
    Host my_ssh_host_config_name
        HostName 123.12.12.123
        Port 1234
        User  username
        IdentityFile ~/.ssh/id_rsa

    В настройках FireFox - Proxy - указать SOCKS Host: 127.0.0.1, Port: 5555, SOCKS v5
    5e444987ecf34155912416.png
    Ответ написан
  • Кто же я такой в 3D?

    DanceM
    @DanceM
    Кто хочет -ищет способ, кто не хочет -ищет причину
    Если делаете модели, то моделлер. Game props modelling, в данном случае.

    Левел-дизайнер это немного больше, чем просто делать модели для уровней, это скорей разработка, тестирование и корректировка игровой логики. И моделить вам для этого совсем не обязательно уметь.

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

    Sanasol
    @Sanasol Куратор тега Laravel
    нельзя просто так взять и загуглить ошибку
    а сейчас не могу понять как это сделать?

    Может быть потому что он всегда был Carbon?

    А еще есть просто now()

    В крайнем случае есть в php DateTime ну и всё такое.
    Ответ написан
  • Как нарисовать такую звезду openGL?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Фигура состоит из 10 вершин, соединенных 10 ребрами.
    На первом шаге тебе надо равномерно распределить по единичной окружности 10 вершин. Сделать это нужно в специально отведенном массиве вершин, т.к. индексированные примитивы в этом старом режиме вывести нельзя.
    На втором этапе переключаем контекст на вывод замкнутой линии (GL_LINE_LOOP) и выводим все 10 точек из массива вершин, но со смещением на 3 точки и по модулю 10.

    Псевдокод:
    void display()
    {
       glClear( GL_COLOR_BUFFER_BIT );
       glBegin( GL_LINE_LOOP );
    
       for( size_t index = 0; index < vertices.size(); ++index )
       {
          const Vertex& vertex = vertices[ ( index * 3 ) % vertices.size() ];
          glVertex2i( vertex.x, vertex.y );
       }
    
       glEnd();
       glFlush(); 
    }
    Ответ написан
  • Принцип DIP из SOLID и Autowiring из DI-контейнеров?

    syamskoy
    @syamskoy
    Dependency injection - это когда в класс A мы передаем класс B через конструктор или сеттер, что бы он с ним работал, а не создавал его в своих нутрях.
    Dependency Inversion - это когда мы в классе A работаем не с конкретной реализацией, а с интерфейсами: указываем интерфейсы в конструкторе, в методах, в возвращаемых типах и т.д.
    Это два разных понятия, которые иногда объединяют в одно, и иногда их путают.
    Так вот, autowiring - это про Dependency injection, а D в solid - это про Dependency Inversion. Одно другому не мешает и не нарушает.
    Ответ написан
  • Сколько времени работает apple wireless keyboard A1314?

    fedorez
    @fedorez
    Хатуль мадан
    Рекомендую приобрести Apple battery charger. За относительно небольшие деньги получите зарядное устройство и шесть блестящих аккумуляторов, кои есть перемаркированные отличные Sanyo Eneloop. И забудете про батарейки.
    Ответ написан
  • Можете посоветовать книгу для начинающего прогера в Unity?

    GavriKos
    @GavriKos Куратор тега Unity Game Engine
    Сам C# уже освоили? Если нет - то осваивайте его БЕЗ юнити. Литературу на тостере советуют регулярно, юзайте поиск.

    Если C# освоили - то достаточно официальных мануалов и туториалов с сайта юнити для начала.
    Ответ написан
  • Банить по IP на время?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Подключаете примерно такую мидлварь
    def _get_ending(n, endings):
        n = n % 100
        if n >= 11 and n <= 19:
            return endings[2]
        else:
            n = n % 10
            if n == 1:
                return endings[0]
            elif n > 1 and n < 5:
                return endings[1]
            else:
                return endings[2]
    
    
    def _get_message(limit):
        if limit > 3660:
            limit //= 3600
            endings = [_('часа'), _('часов'), _('часов')]
        elif limit > 60:
            limit //= 60
            endings = [_('минуты'), _('минут'), _('минут')]
        else:
            endings = [_('секунды'), _('секунд'), _('секунд')]
        return _('Форма отправлялась менее {} {} назад').format(limit, _get_ending(limit, endings))
    
    
    def post_limit_middleware(get_response):
        limits = getattr(settings, 'REQUEST_LIMITS', {})
    
        def middleware(request):
            if request.method == 'POST':
                match = resolve(request.path_info)
                name = '{}:{}'.format(match.namespace, match.url_name) if match.namespace else match.url_name
                limit = limits.get(name)
                if limit is not None:
                    now = datetime.now()
                    user_id = request.user.username if request.user.is_authenticated else get_ip(request)
                    key = hashlib.md5(user_id.encode()).hexdigest()
                    cache_name = 'last-request.{0}.{1}'.format(name, key)
                    last_request = cache.get(cache_name, now - timedelta(days=1))
                    if (now - last_request) < timedelta(seconds=limit):
                        cache.set(cache_name, now)
    
                        if request.is_ajax():
                            response = JsonResponse([_get_message(limit)], safe=False)
                            response.status_code = 429
                        else:
                            response = render(request, '429.html', {'message': _get_message(limit)})
                            response.status_code = 429
                        return response
                    else:
                        cache.set(cache_name, now)
            response = get_response(request)
            return response
    
        return middleware

    Прописывается в settings.py настройку вида
    REQUEST_LIMITS = {
        'contact_form': 3600,
    }

    И живёте спокойно.
    Ответ написан
  • Как ловить исключения в нескольких методах?

    @FanatPHP
    Вопрос странный. В какую розетку мне воткнуть чайник? В ту что ближе!

    Правильно писать блок try-catch там где надо поймать исключение.
    Если нужно ловить исключение в контроллере - ловить в контроллере.
    Если надо ловить в методе - ловить в методе.
    Если надо ловить любое исключение в программе - либо в глобальном блоке try-catch, либо в эксепшен хендлере.
    Ответ написан
  • Установка блейд сервера дома, что нужно?

    @FanatPHP
    Как говорят на реддите, so many questions.
    Весь вопрос - один сплошной когнитивный диссонанс.
    - зачем для маленького проекта блейд?
    - главный вопрос - зачем вообще отдельный сервер для какой-бы то ни было разработки? чем не устраивает имеющийся в наличии ноутбучик?
    - почему именно блейд, а не юнит, если уж на то пошло?
    - что с ним делать дома?
    Единственное разумное объяснение - попытка развести лоха на деньги.
    Ответ написан