• Нужно ли каждый раз делать для себя pull request?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Pull Request делают только тогда, когда нет прав напрямую коммитить в ветку. В твоей же ситуации это сейчас бесполезная операция. Определись, как будет называться твоя главная ветка. Похоже на гитхабе у тебя основная ветка называется main, а локально ты создал master. Двух мастеров, как ты написал, быть не может. В одном репозитории невозможно создать две ветки с одним именем.

    Твоя команда
    git push -u origin master
    отправляет твою текущую локальную ветку master в такую же ветку master на гитхабе и настраивает связь между ними (ключ -u).
    Если ты хочешь отправлять из локальной master в вышестоящий main, то пиши иначе
    git push -u origin master:main
    После того как связь создана, то дальше можно отправлять короткой командой
    git push

    Лучше переименовать локальный master чтобы не путаться
    git branch -M main
    Ответ написан
    Комментировать
  • Нужно ли каждый раз делать для себя pull request?

    Если один в репе - создаешь ветку develop и туда пушишь, и делаешь ПР с develop к main. В main только рабочий код, в develop можешь делать фиксации с тегом WIP: . Так у тебя будет ветка для разработки, и ветка, в которой всегда программа работает, и так как нужно. Плюс к этому, так ты сможешь реализовать простое CI/CD, сделать деплой по пушу в main, а при пуше в девелоп запускать тесты, линтеры и т д.
    Ответ написан
    Комментировать
  • Как рисовать пикселями на Python?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    К примеру matplotlib:
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    res = np.zeros((20, 20, 3))
    res[3, 4] = [254, 0, 0]  # рисуем красный пиксель
    
    plt.imshow(res)

    60fd8bf347e84799773733.png
    Ответ написан
    Комментировать
  • Как провести эскейп анализ?

    "Утечка памяти" — это некорректный термин здесь. Скорее всего вы хотите, чтобы было поменьше аллокаций, соответственно, больше производительность.
    1. Лучше слайс на вход передавать не указателем. Если слайс нужно изменять внутри функции, то хорошей практикой будет просто возвращать измененный слайс.
    2. Если у вас там много append-ов, то надо не забывать заранее аллоцировать внутри слайса место под эти аппенды, если известно их количество.
    Например, если знаете, что точек в буфере будет 20, то делайте: buffer = make([]point,0,20)
    3. Всегда можно сравнить несколько разных реализаций путем написания бенчмарков. https://scene-si.org/2017/06/06/benchmarking-go-pr...
    Если будете использовать ReportAllocs, то как раз увидите, в каком варианте у вас больше аллокаций.
    Ответ написан
    3 комментария
  • Прыгаю с языка на язык, с одной сферы в другую, как сфокусироваться на одном языке?

    @anton99zel
    29а класс средней школы №7
    Возможно, что у вас нет проекта, идеи.
    Вы пытаетесь через подбор инструмента поймать интерес к чему-либо.
    Это как взять в руки молоток, покрутить его в руках, понять, что одним только молотком ничего не сделать, и берете в руки отвертку. Отвертка прикольная, насадки разные, но и она не явлется вдохновением сделать что-либо.
    Но если бы у вас была идея, проект, например создать из материала кровать или табурет, то под свою идею вы бы и выбирали необходимые инструменты.
    Так и вашем случае:
    Если у вас есть идея - создать информационный сайт или сайт интернет-магазина, либо какой то сервис, с последующей его продажей (например, делать типовые решения для бстрого старта), то и набор языков и навыков у вас бы сложился. Вы бы стали понимать, что вам необходмы знания html, php, mysql.
    -
    Второй момент заключается в уровне ответственности. Если у вас нет заказчика, группы людей, которые могли бы оценить ваш продукт, наставника, то ваш внутренний голос говорит вам, что "забей, чувак, это скучно..."
    А если бы вы относились ответственно к себе, а в будущем и к участникам проекта, то веротяно вы бы не перескакивали с одного языка на другой, с проекта на проект, а доводили бы начатое до конца.
    -
    Апатия возникает тогда, когда вы не видите положительный результат, тенденцию к лучшему после выполнения части работ. Необходимо язык не учить, как учили предметы в школе или институте, а сопровождать практикой, а еще лучше иметь наставника, который будет указывать на ошибки, объяснять непонятные моменты.
    -
    С другой стороны, поиск себя в новом, пробы - это не так уж и плохо.
    Ответ написан
    Комментировать
  • Почему нужно гуглить на английском?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Объясните мне почему программист должен гуглить на английском?

    Ну формально он никому ничего не должен.

    Основная причина, почему я гуглю на аглицком, в том, что 90% документации - именно на аглицком. И да, я именно гуглю, ибо яндекс в вопросах поиска технических текстов если и не полное г., то в общем как-то чересчур гуманитарен.

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

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

    @rPman
    Не создавай себе проблему, используй потоки а не процессы.

    Шарить данные в пределах одного процесса значительно проще чем пытаться это делать между процессами, не только с точки зрения логики и кода но и организации.

    p.s. питон и скорость? не могут эти два слова рядом стоять... а уж если нужно shared memory использовать и подавно, нефиг искать себе геморой.
    Ответ написан
    1 комментарий
  • Как можно посчитать площадь сложной фигуры?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Как написал Илья, можно растеризовать картинку и подсчитать незакрашенные пиксели. Это простой в реализации метод, но, если нужна высокая точность, он будет очень медленным и требовательным к памяти (экспоненциальное время и память от количества нужных знаков). Однако, есть алгоритм, который позволяет получать площадь в символьном виде (типа 3/2+5113/11*sqrt(31)). Ну, или любое нужное вам количество знаков без огромного потребления памяти или вычислений (метод полиномиален от количества вычисляемых знаков).

    Это некоторое обобщение метода выделения областей или нахождения граней планарного графа.

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

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

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

    После этой сортировки вы в каждой вершине имеете все ребра отсортированные по углу. Теперь можно для каждого исходяжего из вершины ребра найти следующее по часовой стрелке. Это то ребро, которое получится, если стоя в точке пересечения пойти не по этому ребру, а по тому, что идет чуть-чуть левее:
    вот картинка mad paint skillz
    60ae079489dbd754935211.png


    Также, если не очевидно, граф-ориентированный. И по время построения вам надо для каждого ребра запомнить обратное.

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

    В итоге каждая замкнутая область будет обойдена против часовой стрелки. Кроме одного исключения - вся картинка будет обойдена по границе по часовой стрелке, но это можно легко проверить через векторные произведения соседних дуг (касательных) и выкинуть эту область из рассмотрения. У вас будет список дуг/отрезков прямоугольника. Теперь осталось понять, какие области не покрыты окружностями. Во-первых, если область имеет выпуклую дугу (дуга против часовой стрелки вдоль окружности), то область 100% внутри окружности. Во-вторых, надо взять любую вершину области и проверить, не лежит ли она строго внутри какой-либо окружности.

    Если область оказалась не покрыта, то можно взять ее площадь и прибавить к ответу. Тут нам помогает, что мы нанесли горизонтальные точки на окружности - все ребра области или сторого вертикальные отрезки или идут горизонтально, как график функции. А значит можно взять интеграл по x (вы знаете, какой окружности принадлежит ребро, знаете границы по x и верхняя или нижняя грань это).

    Вот так и считается ответ. Все координаты можно считать в символьном виде - они будут вида a/b+sqrt(c)/d. Вектора касательных будут такого же типа. Такие числа можно перемножать, складывать, вычитать и сравнивать. Правда, после операций вы получите множество радикалов, но тут нет проблем, потому что сравнивать результаты вам уже не придется. Ну, или тут можно использовать числа с плавающей запятой и спокойно получить 12-14 знаков точности.
    Ответ написан
    Комментировать
  • Как узнать есть ли у переменной структуры метод?

    // Вводим интерфейс с методом Close
    // Можем даже использовать готовый io.Closer
    type Closer interface {
        Close()
    }
    
    // Проверяем, удовлетворяет ли Handler интерфейсу
    if casted,ok := m.Handler.(Closer); ok {
        // Если удовлетворяет, вызываем метод
        casted.Close()
    }
    Ответ написан
  • В чём разница между json.Unmarshal и json.NewDecoder?

    @ghostiam
    На Go писатель, серверов пинатель.
    json.Unmarshal использует массив байт, а json.NewDecoder это потоковый парсер, которому не нужно сразу хранить в памяти все данные для парсинга.

    Для парсинга json из файла или из запроса, я бы советовал json.NewDecoder, так как он будет меньше потреблять памяти (не нужно заранее считывать в память массив байт).
    Ответ написан
    Комментировать
  • Как постепенно перекочевать из Web в Machine Learning максимально безболезненно?

    @asd111
    Из языков строго python. Он похож чем то на Golang и на javascript так что сложностей в использовании не возникнет. С++ и R сразу нет. Потому что на С++ пишут в основном только сами библиотеки для ML либо что то очень быстрое наподобие анализа видеопотока в автопилотах и даже тогда прототип пишут на python, а R практически не развивается по сравнению с python и имеет более узкую сферу применения чем python.
    В плане обучения можно сделать так:
    1. Прочесть хорошую книгу по теме, потому что нужно знать термины и основные алгоритмы. Ну или хотя бы посмотреть курсы Andrew Ng Machine Learning. Для применения чужих библиотек на простых задачах этого в принципе достаточно.
    2. Глянуть scipy, numpy и jupyter notebook. У scikit есть scikit learn, в котором реализованы некоторые популярные алгоритмы. Например SVM, decision trees и т.д. и есть доки под это дело для начинающих scikit-learn.org/stable
    3. Зарегистрироваться на kaggle.com и найти задачу про титаник. Вот она https://www.kaggle.com/c/titanic Делаете решение как умеете. Можно взять простой gradient boost. Yandex как раз недавно выложил либу под это дело называется cat boost https://tech.yandex.ru/catboost/ Банальное использование этой библиотеки может дать около 80% точности. Вот туториал https://github.com/catboost/catboost/blob/master/c...
    4. Прочитать про keras. Взять готовую модель для смешивания стилей изображений и сделать сайт наподобие ostagram.ru для смешивания изображений. https://github.com/fchollet/keras/blob/master/exam...

    5. Дальше всё зависит от вас, поскольку заработать в области ML непросто :) Когда прочтете хотя бы одну книгу по ML, регистрируйтесь здесь ods.ai - это сообщество русскоговорящих специалистов в данной области.
    Ответ написан
    Комментировать
  • Какую книгу выбрать для изучения программной архитектуры компьютера?

    Шикарная книга - Чарльз Петцольд "Код. Тайный язык информатики".
    Она не сильно научная, без терминов всяких, которые еще больше путают, все на пальцах.
    В оригинале - Charles Petzold "Code: The Hidden Language of Computer Hardware and Software".
    Ответ написан
    Комментировать
  • Какую книгу выбрать для изучения программной архитектуры компьютера?

    rockon404
    @rockon404
    Frontend Developer
    Таненбаум Э. "Архитектура компьютера"
    Ответ написан
    Комментировать
  • С чего нужно начать изучать программирование нейронных сетей?

    всерьёз и надолго – это выбрать и пройти программу обучения.

    Как вариант, Школа Анализа Данных Яндекса. Посмотрите вступительные задания (напр. 2016 года)

    На английском языке выбор шире – на Coursera, Udacity есть программы по ML.
    Ответ написан
    Комментировать
  • С чего нужно начать изучать программирование нейронных сетей?

    @micr0
    Только учусь...
    Почему именно нейронные сети? Анекдот в тему:
    — А почему у вас деревня называется Астафьево?
    — Рассказывают, что у нас однажды Петр Первый со свитой останавливался, и ночью один солдат заснул в карауле. Утром начальник караула спросил царя, как его наказать. Но царь был в хорошем настроении и сказал: "Оставь его! ". С тех пор село называется Астафьево.
    — А-а, я теперь понял, почему соседнее село называется Ипатьево.

    А по делу:
    1. Выучить язык программирования Python или R (или оба)
    2. Вспомнить школьную математику
    3. Изучить линейную алгебру, статистику, комбинаторику и теорию вероятностей
    4. Наконец, начать читать про машинное обучение и data science. Можно по книгам учиться, а можно и в интернете материал брать - тут от вас зависит, как вам удобнее.
    Ответ написан
    6 комментариев
  • Как попасть в поток GET запросов по таймингу через Python?

    adugin
    @adugin Куратор тега Python
    Посмотрите в исходники сайта. С вероятностью 99.9% браузер получает данные через вебсокет. В таком случае цепляетесь к этому же вебсокету, и данные появляются в приложении сами собой (push). Вот здесь я показывал кусок асинхронного кода по работе с вебсокетом (asyncio + websockets). Для тестирования вебсокета удобно пользоваться расширением Smart Websocket Client для Chrome.

    Посмотреть вебсокет-трафик можно в стандартном Developer Tool'е (Shift+Ctrl+I):
    59f75e5b32c40896297787.png
    Ответ написан
    1 комментарий
  • Что лучше для работы с Dom деревом [python3]?

    @deliro
    lxml

    Никогда не используй beautiful soup. Никогда.
    Ответ написан
    4 комментария
  • Requests Python 3, парсинг страницы. Почему не возвращает таблицу?

    qlkvg
    @qlkvg
    python backend developer
    Таблица рисуется не статически, а в результате ajax-запросов. Если не нужна высокая скорость, можно взять selenium и не париться - он отрендерит страницу, а дальше любым способом можно будет спарсить необходимые данные. Если время критично/ресурсов мало/хочется прокачать скилл - то надо смотреть в консоли разработчика во вкладке network, что вообще происходит со страницей при загрузке и как формируется таблица.
    Ответ написан
    5 комментариев