• В чем отличие ngnix от golang?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Ну раз с фронта пересели, то аналогию понять должны: В чëм отличие Google Chrome от JavaScript?
    Ответ написан
    3 комментария
  • Как организовать охлаждение микрокомпьютера?

    nava2002
    @nava2002
    Инженер
    Если я правильно понимаю то это великолепный радиатор размером с плату. Главное хорошо организовать отвод тепла от процессора на этот радиатор. Вентилятор думаю вообще не понадобится.
    Я поставил смешной радиатор и к нему вентилятор в корпус на нем у меня сервак крутится уже наверное третий год без проблем.
    Ответ написан
    2 комментария
  • Как организовать охлаждение микрокомпьютера?

    @Drno
    Куллер должен не ВДУВАТЬ воздух в корпус, а ВЫДУВАТЬ, вытягивать наружу.
    Снизу воздух забирается, куллер сверху его вытягивает.
    Ответ написан
    3 комментария
  • Как организовать охлаждение микрокомпьютера?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    Я так понял, что радиатор, показанный на вашей второй картинке, плотно прижат к процессору и снимает с него тепло. Если я понял правильно, то нижняя крышка, показанная на третьей картинке и начисто блокирующая обдув этого радиатора, выглядит по-идиотски.
    Так что, на мой взгляд, ваш первый вариант (прорезка большого отверстия в нижней крышке, восстанавливающего движение воздуха в рёбрах радиатора) - правильное решение.
    Кулер любого типа, дующий на плату сверху, бесполезен. Если и ставить кулер, то надо направлять его воздушный поток на рёбра радиатора. Но вполне аозможно, окажется достаточно и пассивного конвекционного движения воздуха, это надо проверять экспериментально.
    Ответ написан
    3 комментария
  • Какие книги почитать по математике школьнику?

    XOR2048
    @XOR2048
    Web & Browser extension developer
    М.Я. Выгодский - Справочник по Элементарной математике
    П.Е. Данко, А.Г. Попов, Т.Я. Кожевникова, С.П. Данко - Высшая математика в упражнениях и задачах

    Этим обычно в 10-11 Классе восполняют пробелы/вспоминают изученное в течение 7-9 класса. Лично мне помогло в свое время, хорошие учебники
    Ответ написан
  • Расширение таблицы при парсинге?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    В общем, рассказываю про парсинг.

    Код, который видно на странице через инспектор элементов в браузере - это код, который браузер подготовил для пользователя. Открываете сайт - браузер отправлять запрос на сервер. Запрос состоит из метода, пути, заголовков и тела. После первоначального запроса браузер получает от сервера HTML страницу, в которую включено (обычно) множество JS скриптов, которые в процессе выполнения могут создавать дополнительные запросы на сервер для получения дополнительной информации. После выполнения всех действий, пользователь видит в браузере готовый результат, который отличается от первоначального запроса из-за дополнительных джаваскриптов.

    Если элемент (класс, id, и тд) видно в инспекторе браузера - это не означает, что элемент присутствовал при первоначальном запросе. Чтобы увидеть тот код, который браузер получает первоначально (тот самый код, который вы получите через requests, curl итд) - нужно нажать CTRL+U, либо правой кнопкой -> просмотр кода страницы
    Это - тот самый код, который вы получаете, и все данные нужно искать только в нем, это дает гарантию того, что нужный вам элемент будет присутствовать при выполнении запросов через ЯП.

    Если нужного элемента нет на странице, значит он загружен каким нибудь JS скриптом. Здесь будут два варианта:
    1. JS отправляет дополнительный запрос на сервер, получает нужные данные и вставляет их в HTML.
    2. Данные создаются внутри JS скрипта без запросов (очень маловероятно)

    Если данные появляются в результате дополнительного запроса, то нужно просто повторить этот запрос.

    Чтобы понять, что нужно - нужно воспользоваться любым сниффером трафика. Самое простое - встроенный в браузер логгер запросов. F12 -> Network.
    6124fec4cfd69347854863.png
    Обычно достаточно поставить фильтр на XHR.
    Если есть под рукой Fiddler, то тоже сгодится. Ну и Burp / ZAP как вариант (но очень жирно).

    Алгоритм будет примерно таким:
    1. Открываем вкладку Network
    2. Очищаем историю запросов (если есть)
    3. Желательно поставить галочку "Preserve log", чтобы история не пропадала.
    4. Обновляем страницу. Если контент подгружается при прокретке / по нажатию кнопки - крутим / нажимаем и тд.
    5. Теперь можно нажать CTRL+F все в той же вкладке Network и вписать искомый текст (допустим название товара).
    6. Слева будут те запросы, которые содержат эту подстроку. Теперь нужно просто пощелкать по ним, найти нужный, посмотреть из чего он состоит и повторить его через requests.

    Нужно обратить внимание на заголовки и тело запроса. Не редко при загрузке доп. информации в тело запроса так же передается указатель текущей страницы, или индекс элемента, с которого начинается новый список. Так же в заголовки могут добавиться дополнительные. Например, csrf token, либо X-Requested-With. Если повторение запроса не принесло желанный результат - стоит проверить заголовки и тело еще раз. Если сайт загружает данные при нажатии на кнопки, прокрутке страницы и тд - алгоритм тот же.

    Делюсь хорошим сайтом, который увидел тут: https://curl.trillworks.com/
    Копируете свой запрос как CURL
    612500b91076a776091384.png
    Затем вставляете на сайт. Он выдаст готовый код на Python. Но нужно понимать, что это автоматический процесс и он не всегда выдает правильный результат. В частности, преобразование application/json тела довольно неправильно. Но для копипаста некоторых заголовков подходит вполне. В общем сайтом пользоваться можно, но и самому думать тоже нужно

    Из хороших программ - Postman. Позволит легко и быстро составлять запросы, есть экспорт в Python код. Советую, если запросы довольно тяжелые, чтобы составлять их "наживую".

    Краткая выжимка:
    1. Код через инспектор браузера != коду с запроса requests / curl.
    2. Скорее всего нужные вам данные подгружаются доп. запросами, ищутся через любой мониторинг трафика.
    3. Следите за телом и заголовками запроса. Заголовки, даже самые незначительные, могут влиять на конечный результат.
    4. Старайтесь всегда в заголовки добавлять User-Agent

    Если данные грузятся без доп запросов, лежат в неизвестном формате, или просто лень разбираться - используйте Selenium. Он является таким же браузером, но только с возможностью контролировать его работу
    Ответ написан
    3 комментария
  • Ошибка с Git, что случилось?

    vabka
    @vabka
    Токсичный шарпист
    1. Генерируешь ключ. Для этого в консоли надо ввести
    ssh-keygen -t ed25519
    На вопросы всегда отвечай ентером, ничего не пиши. (Но лучше всё-таки написать пароль, чтобы приватный ключ не лежал в открытом виде)
    6064a4dd0cc01593209113.png
    2. Потом пиши консоли
    cat ~\.ssh\id_ed25519.pub
    Вывод этой команды копируй и иди на гитхаб.
    6064a56e4e389328241008.png
    3. На гитхабе иди в настройки:
    жмёшь на свою аватарку справа вверху и потом выбирай пункт settings в выпадающем меню
    Потом выбираешь раздел SSH and GPG Keys
    Создаёшь новый SSH Key
    6064a5ac5e236897883208.png
    В название пиши что хочешь
    В тело вставляй то, что скопировал ранее.
    6064a60e7d605276301726.png
    4. Профит
    Ответ написан
    3 комментария
  • Как оформить форк репозитория?

    vabka
    @vabka
    Токсичный шарпист
    Могу ли я заменить лицензию (файл LICENSE) на свою, либо удалить?

    Да, но если будешь публиковать, то должен указать, что твой форк основан на другом продукте под лицензией MIT.
    Могу ли я переписать файл README?

    Да
    Ответ написан
    Комментировать
  • Верно ли "грызть" себя за подсматривание чужого кода в процессе самообучения?

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

    Если же подсмотрел решение, и даже если понял его, то вряд ли сможешь повторить через некоторое время и уж тем более на другую задачу. Эффективность для обучения есть, но она примерно в 10 раз меньше, чем в предыдущем примере.

    Поэтому подсматривать лучше в том случае, когда потратил достаточное количество времени на собственное решение. Не 5 минут, а хотя бы 2 часа размышлений. Тогда уже имеет смысл, чтобы не буксовать. Эффект для обучения хороший, почти как если сам. Чем больше мучений, тем лучше эффект запоминания и выше удовольствие в конце.

    Однозначно стоит подсматривать решения, которые основаны на справочных знаниях, которыми вы ещё не владеете. Элемент зубрёжки никто не отменял.

    Ещё можно подсмотреть, к примеру, 10% решения, а до остального догадаться самостоятельно - это тоже хорошо. Вы сами (субъективно) для себя определяете долю подсмотренного, насколько оно существенно. Ключевая идея - это примерно 90% решения. Если тонких моментов несколько, то доля у них будет примерно одинаковая.

    Таким образом, корить себя стоит только если было потрачено мало времени на самостоятельное решение задачи и если совесть не позволяет назвать решение своим (учитывая вклад).
    Ответ написан
    2 комментария
  • В чем сложность поддержки проектов на Go?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Более четырёх лет пишу на Go, лично для меня поддерживать проекты на других языках сложнее ))
    До Go много лет писал на Perl/PHP/Python/Java/C/Ruby on rails/JavaScript и "крутил" еще не мало чего.
    Сейчас пишу только на Go и Python.

    Основная сложность в Go - это то, что если вы начинаете писать "криво" - то писать так очень трудно :))
    Подход к реализации в Go достаточно непривычный для тех, кто приходит из скриптовых языков.
    Например запрет циклических импортов - это самое первое, что "взрывает" мозг :)
    Нужно время чтобы адаптироваться после скриптовых языков.

    Про обработку ошибок - это да, это, пожалуй, единственное что мне не нравится в Go.
    Для себя я решил эту проблему за 1-2 часа :) и больше меня это не беспокоит.

    По ООП - в Go оно есть, лично мне оно нравится намного больше, чем ООП в других языках ))
    Всё, что реально нужно - всё есть, но при этом ничего лишнего нет.
    Интерфейсы - просто прекрасны :)) Каналы, горутины - это просто "счастье" :))

    А если объективно - то я бы не стал говорить о сложности поддержки проекта применимо к какому то конкретному языку.

    Как правило сложность поддержки возникает там, где нормальная архитектура не заложена в проект.
    Т.е. проект как могла так и писала куча людей плюс, как обычно, сделать нужно было побыстрее )), от этого никто вообще не думал об архитектуре и получилось то, что получилось :))
    Про покрытие тестами и документацию мы вообще не говорим )))

    А когда в таком проекте нужно что-то доработать или исправить ошибку, то почти всегда очень не просто найти то место, где нужно править, и после правок в одном месте, как правило, что-то ломается в другом :)

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

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

    Хочется добавить, что как бы не писали про Go, что он простой и т.д. - он явно сложнее Python/PHP и т.д.
    Это еще один повод сказать, что поддерживать код на Go сложно ))

    Также стоит учитывать, что проекты которые пишут на Go зачастую сложнее, чем проекты для которых выберут скриптовый язык. Go выбирают когда планируются большие нагрузки, параллельная обработка чего-либо и т.д., а это, в свою очередь, дополнительно усложняет проект.
    Ответ написан
    7 комментариев
  • Как корректно занести объект с полем ObjectID в MongoDB (Golang mongo-driver)?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Все правильно, вы при отправке посылаете такой _id, потому что у вас в структуре это значение идет по умолчанию.

    Есть несколько вариантов решения вопроса:
    1) Использовать разные структуры для получения и отправки, где в структуре для вставки не будет поля _id, тогда монга сама задаст значение для id.
    2) Либо генерировать id на клиенте через primitive.NewObjectID()
    в вашем случае:
    testIndicator := db.Indicator{
        ID: primitive.NewObjectID(),
        ...
      }

    3) Использовать *primitive.ObjectID в качестве типа для ID, nil будет значением по умолчанию, тогда монга создаст объект сама.
    Ответ написан
    Комментировать
  • Какие знания по базам данных необходимы начинающему back-end разработчику?

    @Spargwy
    20 годиков. Голанг баккенд девелопер
    -Немного общих знаний о БД
    -Знание и понимание миграций(как писать, как обновлять и т.д.) примитивный, но важный момент.
    -Умение писать запросы - чем сложнее(если требуется!) и качественнее можешь написать запрос тем лучше. Именно благодаря правильной организации запросов часто удаётся достичь прироста производительности. Сюда попадают уже фишки SQL. Можешь посмотреть в сторону pl pgsql - прикольная вещь.

    Да и в общем-то всё
    Это то, чем пользуюсь я на текущем месте работы устроившись джуном(тоже go). Со временем ты будешь больше копать вглубь, изучая детали, нежели вширь.

    А вообще, джуну может хватить обычного CRUD'а. Всё зависит от вакансии
    Ответ написан
    Комментировать
  • Какие знания по базам данных необходимы начинающему back-end разработчику?

    insighter
    @insighter
    -First time? - Huh? (C#, React, JS)
    Все что можно сделать с помощью SQL нужно знать. Изучите досконально джойны, стоит хорошо понимать что происходит на них. Также стоит хорошо разобраться с транзакциями и уровнями изоляции - это важная тема.

    Не в первую очередь стоит браться за изучение оптимизации запросов (это бессмысленно без понимания работы джойнов, индексов, партишинов). Ну и оконные функции тоже не на первом месте по срочности, но изучать будет надо.

    В последнюю очередь триггеры и хранимые процедуры. Целесообразность их использования часто рождает холивары. Как по мне в умеренных количествах ХП это нормально.
    Ответ написан
    Комментировать
  • Какие знания по базам данных необходимы начинающему back-end разработчику?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Судя по совершенно дремучим вопросам, которые задают на тостере, самая большая проблема у начинающих разработчиков - это принцип работы реляционной базы данных, представление данных в нормальной форме, базовые варианты связей, атомарность данных.
    Я недавно нагуглил книгу Святослава Куликова, полистал - вроде бы то что надо.
    https://svyatoslav.biz/relational_databases_book/

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

    Ну и базовый SQL.
    Про "сейчас многие и без него обходятся" - это чушь собачья.
    "Обходятся", во-первых, только на красивых картинках, не имеющих отношения к реальной жизни.
    А во-вторых, когда "обходятся", то в голове все равно держат конечный SQL. Если не понимать, что там тебе настроит ORM, то потом будет очень больно.
    Ответ написан
    Комментировать
  • Где в структуре проекта расположить обертки для сторонних библиотек и API, как их назвать?

    yellow79
    @yellow79
    Senior Software Engineer
    Рекомендуемую кем? Это самозванцы, пруф

    По сути абсолютно не важно куда вы положите обёртку, можно в internal, можно в pkg, можно вообще создать папочку services и туда запихать все внешние зависимости. Нет правил
    Ответ написан
    2 комментария
  • Как организовать методы для конвертации представления данных в проекте на Go?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Мало контекста. Первое, что приходит в голову, лучше:
    "1) Использовать свою структуру и определить на ней методы для конвертации и парсинга других форматов"
    Это сделает удобней обработку данных, раз "необходимо производить множество манипуляций", позволит делать семантическую а не только синтаксическую обработку. Даст single source of truth. Упростит debug и поддержку.
    Ответ написан
    Комментировать
  • Стоит ли начинать (продолжать) с Go?

    vabka
    @vabka
    Токсичный шарпист
    У го вполне нормальное ООП, что бы тут люди не говорили, хоть и урезанная.
    На той же жаве/шарпе адекватные люди реализуют ООП по аналогии с го - Composition over inheritance и из модификаторов только public и private

    Выбирай тот язык, который нравится лично тебе больше (из тех что есть), благо их достаточно.
    Ответ написан
    Комментировать