• Почему происходит рекурсия в getattr?

    @fireSparrow
    Когда вы инстанцируете новый экземпляр объект, то это происходит в таком порядке
    1. Новый экземпляр создаётся
    2. Созданный экземпляр инициализируется в соответствии с __init__

    Таким образом, __init__ сработает только после того, как экземпляр уже создан со всеми его методами. Соответственно, и метод __setattr__ (если он объявлен в классе), у этого экземпляра уже есть.

    Поэтому, когда в __init__ вы пишете self._defs = defaults интерпретатор уже не будет делать это стандартным способом, а полезет в метод __setattr__.
    Там он идёт по ветке else, выполняет pass и на этом успокаивается. В итоге атрибут _defs так и не был записан.

    А после этого, когда вы вызываете __getattr__, интерпретатор видит, что он должен обратиться к _defs, пытается найти его, не находит, и опять вызывает __getattr__, чтобы понять, как ему поступить в этом случае. И там он опять видит, что нужно обратиться к _defs. И получается бесконечная рекурсия.

    А если __setattr__ не определён, то в __init__ нормально создаётся _defs, и ничего такого не происходит.

    Решение:
    замените строчку в __init__ на
    self.__dict__['_defs'] = defaults
    Ответ написан
    1 комментарий
  • Как моделировать дорожный трафик?

    @GreatRash
    Вот тут, можно нажать CTRL+U, промотать в самый низ и почитать скрипты.
    Ответ написан
    1 комментарий
  • Как проще сверстать адаптивный дизайн?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    Хочется сэкономить немного времени на разработку - есть ли готовые библиотеки которые будут определять ширину экрана, устройство, портретный/альбомный виды?
    Есть.
    Ответ написан
    Комментировать
  • Как из объекта вернуть верстку в react?

    @abberati
    frontend-разработчик
    renderContent() {
      const {nameUnit, collorBar, colorFill} = this.props
    
      return Object.keys(nameUnit)
        .map(key => (
          <ProgressBarItem
          colorFill={colorFill} 
          collorBar={collorBar}/>
        ))
    }
    Ответ написан
    4 комментария
  • Почему не удаётся получить classList?

    twobomb
    @twobomb
    Вы пытаетесь у текста (String) получить поле classList, а нужно у элемента
    ab.onmousedown = function(e) {
    	var clickid = e.target;
      console.dir(clickid.classList);
    }
    Ответ написан
    Комментировать
  • Почему многие современные сайты верстают на флексах?

    Wolfnsex
    @Wolfnsex Куратор тега CSS
    Если не хочешь быть первым - не вставай в очередь!
    очень часто вижу такое мнение что построение сеток на основе "float" или "inline-block" лучше, потому что флексы поддерживаются не всеми браузерами. Так ли это и почему в таком случае они так популярны?
    Это действительно так. Но я Вам больше скажу, даже CSS как таковой (или HTML-5), поддерживается не всеми браузерами (IE-1 насколько я помню, CSS не поддерживал). Но я не думаю, что это повод отказаться от CSS или HTML5. И вообще, само по себе выражение "не всеми браузерами" - довольно размытое, что-то из области "не все продукты одинаково полезны".

    и почему в таком случае они так популярны?
    По тому, что они дают довольно большую гибкость, сокращают количество "случайностей" (неожиданного поведения элементов), такой код в целом более читаемый, чем "простыни" из float'ов, и так далее...

    P.S. А ещё по тому, что FLOAT'ы были придуманы изначально не для того, для чего их в последствии приспособили, впрочем как и некоторые другие параметры/свойства/атрибуты...
    Ответ написан
  • Как написать алгоритм поиска соседних элементов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Идея с отдельной работой по X и по Y неплохо работает. На каждом кадре проверяем каждую из 200 точек (это совсем не много).

    Сортируем массив точек по их X-координате. Двигаемся слева направо, выбирая очередную точку.

    Смотрим от неё влево (чтобы не проверять одну связь дважды, выбираем полуплоскость от точки) и отбираем только те точки, чей X отличается не более, чем на radius.

    Из них смотрим только на те, у которых Y не более, чем на radius отличается (уже в любую сторону: и вверх и вниз).

    У них проверяем уже евклидово расстояние – корень из суммы квадратов расстояний по X и по Y – чтобы было не больше radius. У таких есть «связь» – рисуем им ребро.

    Работающий fiddle (неминифицированный исходник на github)
    538264abb31847baa28fe05e015ac13c.png

    На компе даёт около 60 fps, на мобильнике от 40 до 55, т.е. совершенно приемлемая скорость при 200 точках.

    Первая версия ответа

    Интересна ситуация, наихудшая для оптимизации: когда за 1 кадр может поменяться максимальное число связей. Предположу, что это сетка из равносторонних треугольников, где длина ребра равна «триггерной» дистанции:
    картинка треугольной сетки
    5297fe1c584f4551aca5b77a2a987549.jpg
    Тут большинство точек, кроме крайних, взаимосвязаны. У каждой по 6 ближайших соседей. Примерно 200 * 6 / 2 = 600 связей (чуть меньше из-за краёв).

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

    В идеальном мире всем достаточно проделать бесконечно малый шаг, и, вуаля!, было 600 связей, стало 0. Такой же шажок назад – не было связей, и вот их 600. Т.е. надо бы в каждый кадр проверять 600 ребер. Считать это за теоретический предел оптимизации?

    Сущности
    Точки и рёбра. Ребро ссылается на две точки. Точка ссылается на рёбра. Ребро имеет длину и, в зависимости от длины, может быть «видимым».

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

    Можно давать рёбрам веса, пропорциональные желаемой частоте их обновления. Скажем, от 0 до 1. Вес равный 1 значит, что нужно проверять каждый кадр. Например, вес W = Math.max(0, D - Math.abs( length - D))/D, где D – пороговая дистанция.

    Остаётся сделать механизм, отбирающий рёбра в работу на очередном кадре, исходя из их весов. Запоминать время, когда ребро было обновлено. Приоритет его попадания в обработку равен W * (time - timeUpdated)
    Ответ написан
    3 комментария
  • Как правильно работать с потоками в python?

    @Eugen_p
    Вот крутое видео об потоках процессах от Д. Бизли. Где-то даже был перевод на русский.
    Ответ написан
    1 комментарий
  • Как присвоить нескольким классам одинаковое значение переменной внутри?

    @fireSparrow
    Похоже, вы не очень понимаете, как работают классы.

    Если вы создаёте аттрибут self.color - то это аттрибут экземпляра, а не класса. Вы не сможете обратиться к значению этого аттрибута через класс, это значение будет разное для каждого экземпляра.
    Ответ написан
    Комментировать
  • Где и как хранить идентификаторы для ajax-запросов?

    @D3lphi
    Храните чистый id, без всякого хэширования. Что в этом такого? Ну захешировали вы этот идентификатор и что? По вашему, пользователь не сможет "узнать" id статьи из хэша? Тогда бы уж использовали бы при хэшировании какой-нибудь, известный только вам, ключ (ИМХО, тоже особого смысла в этом нет).
    Не понимаю, от чего вы тут хотите защититься?
    Ответ написан
    Комментировать
  • Почему не работает git через ssh?

    Endru9
    @Endru9
    Админ Linux
    <parameters initDir="C:\Path\To\Git\Bin"/>
        <error type="WinApi" operation="SetCurrentDirectory()" code="3" message="Системе не удается найти указанный путь."/>

    C:\Path\To\Git\Bin - указан на втором скрине. думаю стоит смотреть в эту сторону!
    Ответ написан
    1 комментарий
  • Как сдвинуть 1 из flex элементов в конец строки?

    lavezzi1
    @lavezzi1
    Еще вариант: обернуть первые два в блок, у тебя получится два элемента в контейнере (блок с двумя элементами и последний элемент) и контейнеру задать justify-content: space-between;
    Ответ написан
    Комментировать
  • Автообновление файлов в Sublime Text при изменениях в репозитории Git

    ghaiklor
    @ghaiklor
    NodeJS TechLead
    Так он их и так автоматически релоадит. Sublime 3 стоит.
    Ответ написан
    Комментировать