• Как правильно взаимодействовать с каналами?

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

    Лучше сделать так
    package main
    
    import (
    	"bufio"
    	"fmt"
    	"os"
    	"sync"
    )
    
    func main() {
    	urls := make(chan string)
    	go fillChannel(urls)
    
    	// создаем группу для ожидания, того, что все воркеры завершены
    	wg := &sync.WaitGroup{}
    
    	for i := 0; i < 5; i++ {
    		// при запуске каждого воркера, увеличиваем счетчик в группе на 1
    		wg.Add(1)
    		go requestWorker(urls, wg)
    	}
    
    	// ждем, пока счетчик в группе не будет равен 0
    	wg.Wait()
    }
    
    func requestWorker(channel <-chan string, wg *sync.WaitGroup) {
    	// По завершении воркера счетчик в группе будет уменьшен на 1
    	defer wg.Done()
    	// Заодно пишем сообщение о завершении воркера
    	defer println("Worker stopped")
    
    	// Постоянно читаем из канала новые сообщения
    	// цикл автоматически завершится, когда канал закроется и буфер будет пуст
    	for url := range channel {
    		println(url)
    	}
    }
    
    func fillChannel(channel chan<- string) {
    	file, err := os.Open("data.txt")
    	defer file.Close()
    
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    
    	fileScanner := bufio.NewScanner(file)
    	fileScanner.Split(bufio.ScanLines)
    
    	for fileScanner.Scan() {
    		channel <- fileScanner.Text()
    	}
    
    	// закрываем канал, когда данные кончились
    	// в го принято, чтобы канал закрывал только тот, кто в него пишет
    	close(channel)
    }



    Этот паттерн называется worker pool. Мы пишем в канал все нужные данные и закрываем канал, когда данные кончились. Благодаря тому, что воркеры читают из канала через range, цикл просто выходит, когда канал закрыт и воркеры завершаются.
    WaitGroup используется для того, чтобы подождать, пока воркеры доработают последние данные.
    Ответ написан
    Комментировать
  • Как использовать форк пакета в Го?

    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 комментарий
  • Бывают ли сервисы - переадресователи мейлов?

    @Styxian
    Добрый день.
    Есть несколько проверенных сервисов для скрытия своего основного адреса:
    anonaddy.com
    simplelogin.io
    Оба сервиса имеют возможность бесплатного использования. На платной основе пристувует возможность привязать свой домен. У проектов открытый исходный код и их можно поднять на своём сервере.
    Ответ написан
    Комментировать
  • Какой дефолтный пароль от ubuntu 20.04?

    @pfg21
    ex-турист
    как и обычно, посмотреть документацию яндекса. первый же ответ на поиск "виртуальная машина яндекс пароль"
    https://cloud.yandex.ru/docs/compute/operations/im...
    В публичных образах Linux, предоставляемых Yandex.Cloud, возможность подключения по протоколу SSH с использованием логина и пароля по умолчанию отключена.


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

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Самый простой пример - это HTTP сервер.
    Когда к вам приходит HTTP запрос - создаётся горутина и каждый запрос спокойно обрабатывается, никто никого не ждёт. Т.е. сервер может обрабатывать параллельно несколько запросов как раз за счёт горутин.

    Фактически, почти во всех сетевых сервисах есть смысл использовать горутины для распараллеливания обработки запросов (кроме epoll, kqueue и т.п.)

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

    Для ускорения работы вычислений (параллельные вычисления) есть смысл использовать горутины только по 1 на поток процессора). Т.е. в случаях, когда у вас огромный объём данных и нужно максимально ускорить его обработку. Например у вас файл 100Гб, и 8 ядер в процессоре - вы можете разбить файл на 8 частей и параллельно эти части обработать (в самом простом варианте, в реальной жизни нужно будет просто по частям считывать новые данные и скармливать свободной горутине)

    Еще когда нужно сделать чтобы какая нибудь задача выполнялась в "фоне".
    Например периодическая очистка кеша/устаревший записей в базе.

    Реальных примеров намного больше :)
    В целом их есть смысл использовать там, где нужно параллельное выполнение какой либо задачи или разных задач параллельно :)
    Ответ написан
    2 комментария
  • Как полностью анонимизировать операционную систему?

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

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

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    ANKI
    ANKI DROID

    и еще есть один аналог, гугл по этим
    Ответ написан
    Комментировать
  • Как привлечь провайдера к ответственности?

    @egn_onegin
    Всем участвующим в беседе доброго времени суток!
    Зарегистрировался исключительно из-за данного поста.
    Небольшое лирическое отступление: работаю в support регионального isp, в связи с чем приходится постоянно общаться с подобными всезнающими геймерами.
    Поскольку предварительно я почитал ответы автора сабжа на некоторые комментарии аудитории, то отвечать постараюсь максимально доступным языком.

    morfianes
    Согласно предоставленной тобой лично трассировке winmtr (по хопам):
    1. твой роутер;
    2. какой-то неизвестный провайдерский хост, предположительно, закрытый по icmp;
    3. очередной хост на сети твоего провайдера (возможно, промежуточный коммутатор или иное, предположительно, активное сетевое оборудование);
    4. gateway твоего провайдера, с которого тебе непосредственно предоставляется доступ во-вне (в интернет) - на этом ЗО (зона ответственности) твоего провайдера ВСЕ!!!
    Вот, лять, прямо вообще ВСЕ, от слова СОВСЕМ!!!
    5. ЗО вышестоящего оператора!!!
    и т.д.

    Ты молодец!! Красава!! Ресспектую!!
    Нагуглил, а может и в Яндексе поискал и нашел, 2ip.ru на котором "пробил" принадлежность проблемного, по твоему мнению, ipшника, а именно 94.25.8.129, и, казалось бы, вот ОНО!!!
    Ipшник находится в адресном пространстве, принадлежащем твоему провайдеру, но...
    Правильно - ничего!!!
    Вот, лять, прямо вообще НИЧЕГО!!! От слова СОВСЕМ!!!

    Тот, факт, что, согласно нарытым тобой данным, ipшник принадлежит Ростелекому, ну, т.е. твоему провайдеру, вообще ни о чем не свидетельствует.
    Как правильно заметил support Ростелекома, о чем и тебе сообщил, ты даже скриншот с перепиской скинул, но головой подумать дальше видимо чего-то не хватило.

    Согласно данным whois, ресурс с этим ipшником находится в сети Prestig_Internet.
    Ничего не смущает, не?!

    А теперь так же банально, как ты 2ip.ru разыскивал, берем и гуглим, ну Яндексом пользуемся, (тебе что удобнее??) Prestig_Internet и первой ссылкой, по каким-то причинам, enforta.ru.
    Немного странно, конечно, но и к этому вскоре подойдем.

    Чуть ниже в результатах поиска, хотя... не утруждайся - прикладываю ссылку: https://www.list-org.com/company/704092
    Сам же ты все равно не найдешь.
    Переходим по ссылке, читаем и, о Боже!!, выясняем для себя следующее:
    - Организация ООО "ПРЕСТИЖ-ИНТЕРНЕТ"... наверное имеет прямое отношение к сети Prestig_Internet, по крайней мере это вполне логично предположить.

    По всей видимости у ООО "ПРЕСТИЖ-ИНТЕРНЕТ" в свое время не хватило адресной емкости, в связи с чем у Ростелеком, да-да, именно у твоего провайдера, просто напросто был куплен ipшник.
    Вот так просто!!! Взяли и купили у Ростелеком ipшник, прикинь, ля!!!
    Однако, полагаю, что данный ipшник Ростелеком просто взял и "зажал", т.е. данный адрес не является PI, т.е. провайдеро-независимым, но это ты потом загуглишь, ну или в Яндексе найдешь.
    По факту расторжения договорных отношений между ООО "ПРЕСТИЖ-ИНТЕРНЕТ" и Ростелеком его (ipшник), скорее всего, придется вернуть.

    Читаем далее:
    - Статус: ПРЕКРАЩЕНИЕ ДЕЯТЕЛЬНОСТИ ЮРИДИЧЕСКОГО ЛИЦА ПУТЕМ РЕОРГАНИЗАЦИИ В ФОРМЕ ПРИСОЕДИНЕНИЯ с 01 ноября 2017 года.

    И тут, казалось бы, все мои доводы рухнули, разлетелись в пух и прах, но... х... ты угадал!!
    Листаем ниже!!
    - Правопреемники: АО "ЭР-Телеком Холдинг" (брэнды Дом.ру и Энфорта, если, вдруг, ты не в курсе).
    Теперь более понятно, при чем тут Энфорта. Если все еще не понятно - читай далее.

    Таким образом получаем следующее:
    - ipшник принадлежит Ростелеком, ибо он не является PI (предположительно);
    - железо, которое работает на этом ipшнике, принадлежит АО "ЭР-Телеком Холдинг" - на основании данных list-org.com;
    - какие отношения в разрезе данного ip адреса между Ростелеком и АО "ЭР-Телеком Холдинг" мне вот прям до звезды фиолетово.

    Могу осмелиться предположить, что маршрутизация от тебя, а по факту от твоего роутера 192.168.0.1 (D-Link, наверное), до конечного ресурса, а именно 162.249.73.10, который, как бы, тоже нихрена не у тебя под боком находится, строится по принципу OSPF... а может BGP... а может... (да, простят и поправят, в случае ошибки, коллеги по цеху).
    Что такое OSPF/BGP потом загуглишь, ну или в Яндексе найдешь.
    Если не найдешь, привлекай Rambler к содействию.
    Конечно, мои предположения к фактически используемой маршрутизации на сети твоего провайдера, а так же точкам обмена трафика с другими операторами связи, остаются только предположениями, но... если... вдруг...

    Итого:
    - 212.48.195.0 - граница ЗО твоего провайдера (Вот, лять, прямо вообще КОНЕЦ!!! От слова СОВСЕМ!!!), с этого момента Ростелеком тебе должен/обязан (читай, как больше нравится) чуть меньше, чем ни...чего;
    - ресурс 94.25.8.129 фактически принадлежит АО "ЭР-Телеком Холдинг", несмотря на то, что ipшник находится в адресном пространстве Ростелеком, контакты ЭР-Телеком найдешь, тут уже совсем все изи;
    - менять маршрут ради тебя одного такого пи...дельного никто не станет - хлопотно;
    - почитай/ознакомься: https://habr.com/ru/post/134892/ - доступным для понимания языком написано;

    P.S. уж слишком дохрена вас таких... "интересных", платят 500рэ за 100М, а голову выделывают...
    Ответ написан
    6 комментариев
  • Доменная зона .su (Soviet Union), причем верхнего уровня. - стоит ли связываться?

    @McBernar
    Есть домены .it, .cc, .io
    Это все региональные домены, но использует их кто хочет. Сейчас нет никому дела до названия и уж тем более домена. Если сервис классный — им будут пользоваться в любом случае.
    Ответ написан
    Комментировать
  • Как правильно подсчитать время, проведённое пользователем в онлайне (VK API)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Отсылаем начало активности на сервер:
    1. Вкладка стала активной
    2. Скролл страницы/мышь/тач/клава/сеть

    Отсылаем завершение активности на сервер:
    1. При уводе мыши с viewport'а
    2. При потере фокуса вкладки
    3. При закрытии вкладки
    4. По средне-двойному таймауту исключительно только для этого клиента! (у всех - он свой и разный!).

    Средне-двойной таймаут вычисляется так: средний неактивный промежуток для этой он-лайн сессии (НЕ ОБЫЧНОЙ СЕРВЕРНОЙ СЕССИИ, А ВЫЧИСЛЯЕМОЙ ПО АКТИВНОСТИ/НЕАКТИВНОСТИ!) умножаем на 2 и уменьшаем общее время активности на это значение.
    Ответ написан
    4 комментария
  • Как защитить от копирования по прямой ссылке?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Был когда-то такой сервис, который музыку в каком-то из лохматых форматов проигрывал (дело было давно, в конце 90-х) без сохранения на диск. И что? Правильно, написали клиента, который имитировал проигрывание, а на деле сохранял на диск :)

    О чем это я? О том, что как только сервис начинает представлять хоть какой-то интерес - напишут Вам любую имитацию, которая будет прикидываться плеером, а сама делать то, что пожелает автор.
    Ответ написан
    Комментировать
  • Можно ли сделать приложения на wpf?

    Zoominger
    @Zoominger
    System Integrator
    Возможно, конечно, закопайте Винформс обратно в землю.
    Ответ написан
    1 комментарий
  • Почему пишутся сами статусы во Вконтакте?

    @entermix
    В разделе «Настройки приложений» (vk.com/settings?act=apps) отображаются все подключённые сайты и приложения. Здесь Вы можете удалить лишние авторизации или отрегулировать Настройки к ним.

    Авторизация — это процесс предоставления приложению данных для входа через Ваш аккаунт на нашем сайте. Он необходим для взаимодействия функциональных возможностей приложения и сайта.

    Если у Вас в истории активности появляются неизвестные IP-адреса, стоит проверить этот раздел, чтобы убедиться, что Вы не авторизовались в сторонних приложениях.


    https://vk.com/faq9989
    Ответ написан
    1 комментарий
  • Как бороться со стрессом на работе?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Мозг каждый день кипит так же, как в первый день. Шаг влево шаг вправо, и вот, я уже ничего не знаю и ничего не умею... ощущение, что на работе я как будто не прогрессирую, а наоборот деградирую...

    У меня такое было, когда я только перешел во фронтенд и пытался держать слишком много деталей о языках и инструментах в голове. Со временем понял, что это не имеет смысла - все меняется быстрее, чем я запоминаю. Перешел от мысли "я использую инструменты" к мысли "я делаю штуки" и сразу полегчало, стал держать в голове только общие идеи о том, как что-то делается, или что вообще бывает в какой-то области, а конкретные инструкции по применению отдельных инструментов изучаю по ходу дела. Изменил фокус своего самообразования, если это можно так назвать. В результате все препроцессоры слились в один, новые библиотеки становятся все менее сложными в освоении, поскольку идеи везде плюс-минус одинаковые и.т.д. Решения стало принимать гораздо проще. И аргументировать тоже. Иногда складывается такое впечатление, что у нас в отрасли совсем ничего не появляется нового уже лет пять, а то и больше. Да, я забываю как использовать флексы, путаю call() и apply(), гуглю свои же ответы на тостере, но это не важно. Голова занята решением проблем, в ней теперь нет никакой второстепенной информации и это очень здорово. Статьи писать тоже полезно оказалось - написал, "поставил на полочку", и забыл. А если будет нужно - можно достать и посмотреть. Таким образом вот эта вся фигня с закипанием мозгов практически ушла.
    Ответ написан
    1 комментарий
  • Трудность восприятия в некоторые дни тревожит меня одного?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    Погода влияет, магнитные бури, недосып, активность Солнца.
    Никакой глубины, у меня, например, так тоже бывает.

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

    miraage
    @miraage
    Старый прогер
    как писать поддерживаемый код?

    Если уж очень коротко, то соблюдать SOLID/GRASP. Мне понравился твит одного из авторов React Router:
    https://twitter.com/mjackson/status/1171524189850701825

    Most common mistake software developers make: putting stuff in the wrong place. Coupling responsibilities and concepts that should be kept separate.
    For me, this is 95% of software development. Just figuring out *where* things belong.


    Что гуглить, что учить?

    Фундаментальные знания, вроде вышеупомянутых SOLID/GRASP, паттерны (не только классические паттерны, но и вообще, общеизвестные решения определённых задач), базовые структуры данных. Фреймворки/библиотеки всегда будут приходить/уходить, что-то будет забываться. А фундаментальные знания всегда актуальны.

    Может литературу какую почитать посоветуете?

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

    Можно ли себя называть миддлом, если твой код говно?

    Не пытайтесь себя оценить. В каждой компании свои понятия миддла. А если кто-то 35 лет на лиспе кодил, а потом прыгнет на Angular - кто он, джун или сеньор?
    И, да, все мы в какой-то степени пишем говнокод. Если кто-то Вам доказывает, что он пишет супер чистый код - не слушайте.

    И ответ на главный вопрос.
    Как перестать говнокодить и принимать неверные архитектурные решения?

    Это невозможно. Все проекты, которые чуток сложнее CRUD-ов, рано или поздно обрастают говнокодом. Никто не пишет идеальный код. Код должен работать и решать проблемы бизнеса.
    Ответ написан
    6 комментариев
  • Как/где изучить git?

    DevMan
    @DevMan
    Ответ написан
    Комментировать
  • Что плохого в количестве коммитов чуть больше, чем за которое могла решиться задача на самом деле?

    Xuxicheta
    @Xuxicheta
    инженер
    В личных тараканах ревьюера. Если уж его так парят коммиты при слиянии PR можно слепить коммиты в один.

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Есть такая штука - авторизация, и есть такое понятие как овнершип (владение) и ACL/RBAC. Во всех скриптах проверяется кто владелец файла, или кто может его изменять/удалять. Если у пользователя есть права на изменение/удаление объекта - скрипт отрабатывает, если нет - выдает ексепшн или иначе оповещает о неудачном завершении.
    Ответ написан
    2 комментария