• Как хранить и сравнивать локации?

    Во многих СУБД есть расширения для работы с пространственными и гео-данными.
    Например в postgres - PostGIS.
    Тебе нужно просто для каждого пользователя определить геолокацию как широту-долготу, а поиск в определённом радиусе уже будет реализован в postgis.

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

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Всего две команды:
    подмена
    go mod edit -replace github.com/orig/pkg v1.0.0=github.com/my/fork/pkg v1.0.0

    или на локальный репо
    go mod edit -replace github.com/orig/pkg v1.0.0=/local/path/onyourmachine

    вернуть обратно когда ваш PR закоммитят
    go mod edit -dropreplace  github.com/orig/pkg v1.0.0

    А можно подправить go.mod вручную. В нём должно появиться
    replace github.com/orig/pkg v1.0.0  => github.com/my/fork/pkg v1.0.0

    В исходниках при этом менять импорты не нужно.
    Ответ написан
    1 комментарий
  • Как конкретно реклама от Яндекса и Гугла узнает, что ее просматриваю именно я, и подбирается персонально под меня?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    iframe

    их сайт встроен в сторонний, тебе не видно просто
    т.е. они показывают тебе все время на своем сайте, на кусочке своего сайта
    Ответ написан
    Комментировать
  • Как поступить с заказчиком?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Вы ведь сами понимаете, что это ваш косяк, а не заказчика? А чего ему за него платить?

    Мне прям вспомнилась ситуация, когда я пришёл к стоматологу вылечить кариес (пусть будет 2 000 рублей), мне рассверлили весь зуб и заявляют "батюшки, да тут же пульпит!" (12 000 рублей).
    Помогите Маше найти фразу для стоматолога, которая позволила бы сохранить хорошие отношения.

    И вот вы сейчас, по прошествии 2 месяцев, оставите заказчика один на один с незавершённым проектом, в котором никто не разберётся (то есть по сути ни с чем) - то вы поступаете как чудак. Я же вижу по тексту, что понимаете.
    А сюда вы за индульгенцией пришли? :)

    Хотите "сохранить отношения" - доделывайте как есть, в будущем будете мудрее.

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

    Два совета на будущее:
    1) Перезакладывать стоимость и время разработки;
    2) Если понимаешь, что всё идёт не по плану/пропал интерес / слишком сложно / некомфортно / whatever - сказать об этом сразу и отказаться от проекта, так всегда получается честнее

    Опыт всегда стоит дорого, а 53 000 рублей - ну не самая большая цена его получения :)
    Ответ написан
    8 комментариев
  • В чем отличие EventLoop в браузере от EventLoop в Node.js?

    black1277
    @black1277
    Вольный стрелок
    Вы немного запутались. Начиная с 11-й версии Node.js, разница в поведении приведенного вами кода в браузере и ноде - была устранена. Касаемо 6 этапов или фаз, они происходят внутри движка libuv(libuv - это многоплатформенная библиотека C, которая обеспечивает поддержку асинхронного ввода-вывода на основе циклов событий).
    Разница в том, что в Node.js мы можем не дожидаться окончания всех этих фаз, а вклиниться на определенных этапах для исполнения микрозадач (при помощи setImmediate и process.nextTick), а в браузере идет взаимодействие с Web API’s (браузерные или веб API), из которого могут поступать новые события (клики, движения мыши и др.), добавляющие в очередь новые макрозадачи(если установлены обработчики этих событий). Кроме того, в браузере есть рендеринг, который не может быть выполнен пока идет выполнение задачи движком(из этого следует, что необходимо разбивать тяжелые и длительные задачи на части).
    Как я не пытался изложить точнее и короче, к моим словам можно придраться буквально к каждой фразе. Поэтому, лучше самому изучить первоисточник и пару статей на русском:
    What is the Event Loop?
    Объяснение работы EventLoop в JavaScript
    Игра по правилам: Event loop Node.js
    Как устроены цикл событий и стек вызовов в JavaScript
    Ответ написан
    1 комментарий
  • Можно ли без высшего образования работать в Геймдеве?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    На наличие вышки никто не смотрит. Но она не лишняя. Как минимум глубоко в рендер-пайплайне сидят матрицы - и это уже ВУЗовская математика (если программа не поменялась). +вышка это хорошая школа жизни (ща в меня полетят тапки - но это личное мнение), которая поможет выстроить в т.ч. коммуникативные навыки.

    Можно быть отличным специалистом без вышки, можно быть говном с тремя дипломами.
    Ответ написан
    2 комментария
  • Можно ли без высшего образования работать в Геймдеве?

    @MarkusD
    все время мелю чепуху :)
    Без вышки работать можно не только в геймдеве. Вообще везде можно работать. Это иногда даже негласно приветствуется.
    За такую работу можно даже получать некоторые деньги, которых будет хватать на жизнь.

    Я работал с несколькими самородками. Эти ребята - реальные спецы своего дела. Вышка им бы только мешала в их работе, оттягивая на себя их реально ценное время. Они многого добились и продолжают добиваться. Это такие немного особые люди. А для всех остальных людей без образования будут мои следующие строки.

    Никакой более-менее серьезной должности, зарплаты или даже роли без высшего образования ждать не стоит. Не продвинут, не зачтут, не посчитают нужным. Потому что всегда есть более квалифицированный и подготовленный человек для этого. И лишь только ради открытия этих перспектив идти учиться в ВУЗ тоже не стоит потому что учебу в ВУЗе понимать нужно правильно.

    Оттарабанить 4-6 лет, вытягивая лямку нормативов на экзаменах без четкого понимания требований к тебе - это пустить деньги и время на ветер.
    В ВУЗ нужно идти за обучением самоконтролю, за обучением самодисциплине, за обучением самоорганизации. Вот те самые навыки, которые сегодня дает ВУЗ. Диплом магистра, бакалавра или специалиста - это дополнительный бонус. Разовьешь эти навыки самостоятельно - станешь одним из точно таких же самородков.
    В ВУЗ стоит идти за трамплином к знаниям. Чаще всего человека надо только подтолкнуть чтобы он стал специалистом. А толчком таким и является программа базового обучения в ВУЗе. Обучение базовое потому что его для последующей работы все равно хватать не будет. Дальше с этого трамплина нужно рвать во весь опор, находя и усваивая самые важные и самые нужные для своей работы знания. Осилишь найти все эти знания сам - ну чтож, ты один из немногих способных.
    По окончании ВУЗа человек не выпускается готовым к работе. На этом этапе он обладает только самыми базовыми навыками и дальше нужно продолжать учиться по профилю работы. Для этого есть стажировки, квалификационные курсы, а так же разнообразные книги и циклы статей для самостоятельного обучения.
    ВУЗы не готовят людей к работе, ВУЗы готовят людей к самостоятельной профессиональной подготовке.

    Люди без вышки спокойно работают в геймдеве рядовым персоналом десятки лет без шанса и желания повышения. Деньги идут, работа делается, проблем нет. Кое-где я таких людей наблюдал целыми отделами. Прекрасно работают, их все устраивает. Некоторым людям не нужны перспективы карьеры или роста, это нормально. А значит, таким людям и вышка тоже не сильно нужна.
    Ответ написан
    1 комментарий
  • Как правильно типизировать функцию?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    function preparedData<T extends Record<string, {name: string, id: string}[]>>(data: T) {
      return Object.keys(data).map((key) => {
        return data[key as keyof T].map((a) => ({
          val: a.name,
          newId: a.id,
        }));
      });
    }

    https://www.typescriptlang.org/play?#code/GYVwdgxg...
    Ответ написан
    Комментировать
  • Как в Mikrotik направить в VPN определенные сайты?

    @norevoh Автор вопроса
    Нужно было поставить
    /ip settings rp-filter=loose

    Стояло в strict
    Ответ написан
    Комментировать
  • Как можно протянуть такую линию между точками без фикс высоты?

    sergski
    @sergski
    web-developer
    например, так:
    Ответ написан
    Комментировать
  • Как управлять яндекс-лампочкой в обход апи яндекса?

    @justslipknot Автор вопроса
    Как выяснилось, яндекс лампочки - это ребрендированная Tuya лампочка. У Tuya есть локальный протокол и модуль для Home Assistant. Но я решил вопрос немного иначе:
    1. Устанавливаем приложение Smart Life или Tuya Home (оба совместимы с яндекс лампами)
    2. Сбрасываем настройки лампочек и добавляем их в приложении Smart Life / Tuya Home
    3. Регистрируем приложение на платформе Tuya. Инструкция есть в этом репозитории.
      Пояснение
      Этот шаг нам нужно проделать, чтобы получить Local Key, который требуется для шифрования и расшифровки запросов (Local Key, как я понял, обновляется после сброса настроек). Инструкция, как быстро добавить устройства в приложение платформы Tuya так же представлено в репозитории

    4. Выбираем библиотеку для работы с Tuya local api. Я выбрал вот эту библиотеку для C#. На GitHub странице этой библиотеки есть инструкция по работе с Tuya local api.
    5. Реализуем нужный нам функционал


    Небольшой топорный пример из моего тестового проекта:
    Поиск устройств Tuya в сети

    // Эти данные можно получить на странице вашего приложения на платформе Tuya.
    var accessId = "<access id>";
    var apiSecret = "<api secret>";
    
    // Сканируем сеть на наличие доступных устройств Tuya. 
    // Хранение найденных устройств реализуется как душе угодно
    
    var scanner = new TuyaScanner();
    scanner.OnNewDeviceInfoReceived += (sender, info) =>
    {
       // логика сохранения найденных устройств 
    };


    Получение Local Key


    Самый важный этап.
    Пример взят из репозитория библиотеки
    var api = new TuyaApi(region: TuyaApi.Region.CentralEurope, accessId: ACCESS_ID, apiSecret: API_SECRET);
    var devices = await api.GetAllDevicesInfoAsync(anyDeviceId: DEVICE_ID);
    foreach(var device in devices)
    {
        Console.WriteLine($"Device: {device.Name}, device ID: {device.Id}, local key: {device.LocalKey}");
    }


    Отправка команд устройству

    var device = new TuyaDevice("<IP адрес>", "<local key>", "<device id>");
    
    // Пример команды включения лампочки
    // Метод FillJson автоматически подставляет нужные параметры, поэтому сразу пишем запрос.
    // Про методы DPS можно почитать в официальной документации Tuya
    var onCommand = device.FillJson("{\"dps\":{\"20\":true}}");
    
    var request = device.EncodeRequest(TuyaCommand.CONTROL, onCommand );
    
    // Посылаем сигнал. Если устройство не ответит, то падает исключение 
    var encodedResponse = await device.SendAsync(request);
    var response = device.DecodeResponse(encodedResponse);



    Далее остаётся разобраться с кодами команд и можете контролировать лампы как вам угодно.
    Ответ написан
    3 комментария
  • Как можно прикрутить поддержку socks5 ,http,https proxy к Golang скрипту?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    надо кодить, иначе не прикрутить

    например поискать по гитхабу по словам
    socks5 ,https,http

    и скопировать себе
    Ответ написан
    4 комментария
  • Какие лучшие курсы java 2021?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Так же как и в 2020-м - сплошное инфоцыганство и зачитывание учебника с выражением.
    Ответ написан
    Комментировать
  • Как подключитЬся с помощью Golang к другой программе?

    1. Через сетевой протокол на API сторонней программы. (обычно используют JSON RPC, REST, GRPC)
    2. Через вызов клиента другой программы в командной строке из вашего приложения и парсинг вывода.
    3. Вызов функций SDK, предоставленного сторонней программой (обычно через cgo).

    Остальные способы обычно довольно геморойные и редко используются.
    Ответ написан
    Комментировать
  • Почему исходный код языка программирования go написан на go?

    includedlibrary
    @includedlibrary
    Язык программирования же, не может быть написан на своем же языке - это прям похоже на какую-то рекурсию

    Может. Сначала пишем компилятор для нового языка на языке, для которого компилятор уже есть, а потом переписываем его на новом языке. Вообще принято писать компиляторы на языках, для которых они сделаны. Это что-то вроде доказательства, что язык X уже дорос до того, чтобы его можно было использовать.

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

    Почему вы так думаете? Ничто не мешает написать компилятор для компилируемого языка на другом компилируемом языке. И опять же ничто не мешает написать интерпретатор на интерпретируемом языке
    Ответ написан
    2 комментария
  • Почему исходный код языка программирования go написан на go?

    DevMan
    @DevMan
    google -> self-compiling compiler
    в частности https://ru.m.wikipedia.org/wiki/Раскрутка_компилятора
    Ответ написан
    Комментировать
  • JS:Angler-T что с этим делать?

    XOR2048
    @XOR2048
    Web & Browser extension developer
    JS:ScriptIP-inf — это вредоносная программа, которая работает как троянский конь. Это означает, что эта кибер-угроза может войти в систему, притворяясь полезной программой, обновлением или файлом. Однако после установки она может привести к появлению в системе потенциально нежелательных программ (ПНП), шпионов или других вредоносных программ. Кроме того, возможности отслеживания паразита могут привести к потере вашей личной информации, такой как пароли, логины, финансовая информация и так далее. Наиболее важной особенностью JS:ScriptIP-Inf [Trj] вируса является то, что он может блокировать антивирусное программное обеспечение, чтобы скрыть себя в системе.

    Это аналог того же вируса, который вы написали.
    Источник

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

    UPD - на разных форумах пишут, что это распространенная проблема у Avast, видеть Trojan там, где его нет. Совет - используйте другой Антивирус
    UPD 2 - если хотите быть уверены в безопасность скачанного файла/веб-ресурса, то закиньте его на VirusTotal
    Ответ написан
    Комментировать
  • Безопасен ли домашний проброс портов?

    @Drno
    В целом да, это вектор для аттаки.
    Можно купить нормальный роутер, вместо вашей поделки)

    В данной же ситуации - нахер вы никому не нужны. Открывай спокойно 80 порт на свой ПК, если там конечно есть веб сервер)
    Батя быстрее сам вирусню с инета скачает, чем к вам хакеры придут)
    Ответ написан
  • Как на GO послать сообщение в Телеграм (канал, лично) проще всего?

    1. Создать телеграм-бота, через @BotFather
    2. Получить в процессе создания токен.
    3. Админ должен нажать start в личке с созданным ботом (иначе бот ему не сможет отправлять сообщения).
    4. Используя библиотеку https://github.com/go-telegram-bot-api/telegram-bot-api послать сообщение админу (нужно знать юзерайди админа).
    Ответ написан
    1 комментарий