• Какой самый быстрый дистрибутив Linux для программирования?

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

    Резюмируя, причины могут быть такие (именно в таком порядке):
    1. Ты используешь медленный диск. Например hdd, вместо ssd или nvme.
    2. Ты не установил драйвера, которые соответствуют твоей видеокарте. Вместо проприетарных используешь свободные или вообще программный рендер.
    3. Тот софт, который ты хочешь использовать, имеет более высокие требования для решаемых тобой задач.
    4. Ты выбрал слишком жрущий дистрибутив.

    В целом, для слабых компьютеров рекомендуется брать дистрибутивы на основе окружений xfce или lxqt.
    Я бы выбирал между Xubuntu и Manjaro+xfce
    Ответ написан
    Комментировать
  • Какой самый быстрый дистрибутив Linux для программирования?

    Adamos
    @Adamos
    Дистрибутив - не лагает. Может притормаживать DE, если в нем накручено свистоперделок, но в той же Убунте легко ставится другое DE - apt install xubuntu-desktop, например.
    Если же лагают конкретные инструменты - например, профессиональным IDE сейчас весьма по вкусу память, они в нее будут упираться вне зависимости от ОС вообще.

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

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

    Лучше сделать так
    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 используется для того, чтобы подождать, пока воркеры доработают последние данные.
    Ответ написан
    Комментировать
  • Как правильно парсить на Golang?

    @Starship-sn17 Автор вопроса
    У меня получилось, если кому интиресно, вот как я сделал. Всем спасибо за советы и инф.
    package main
    import (
    	"fmt"
    	"github.com/gocolly/colly"
    )
    type Car struct {
    	CarName            string
    	BodyCar            string
    	ReleaseYear        string
    	Color              string
    	DriveUnit          string
    	EngineVolume       string
    	Mileage            string
    	State              string
    	FuelType           string
    	CustomsClearedInRT string
    	Transmission       string
    	Price              string
    	Url                string
    }
    func main() {
    	scrapURL := "https://somon.tj/adv/8960821_tesla-model-y-2022/"
    	c := colly.NewCollector(
    		colly.AllowedDomains("www.somon.tj", "somon.tj"),
    	)
    	var carAttributes []string
    	c.OnHTML(".chars-column li a", func(h *colly.HTMLElement) {
    		carAttributes = append(carAttributes, h.Text)
    	})
    
    	c.Visit(scrapURL)
    
    	car := Car{}
    	car.BodyCar = carAttributes[0]
    	car.ReleaseYear = carAttributes[1]
    	car.Color = carAttributes[2]
    	car.DriveUnit = carAttributes[3]
    	car.EngineVolume = carAttributes[4]
    	car.Mileage = carAttributes[5]
    	car.State = carAttributes[6]
    	car.FuelType = carAttributes[7]
    	car.Transmission = carAttributes[8]
    
    	fmt.Println("Наша тачка -", car)
    }
    Ответ написан
    Комментировать
  • Как сделать, чтобы mPDF не выдавал ошибку 504 при обработке больших файлов?

    Adamos
    @Adamos
    504 выдает не mPDF, а nginx, не дождавшийся конца обработки файла.
    Вам нужно, получив запрос на такую обработку:
    - записывать его в очередь (в БД, например)
    - разбирать ее параллельно (по крону, например)
    - оповещая запросившего о готовности результата (по почте, например).
    Ответ написан
    3 комментария
  • Возможно ли устроиться junior golang без опыта?

    Устроиться без опыта - можно, если твои навыки отвечают требованиям работодателя и ты в итоге попал на этап с техническим собеседованием, чтобы это доказать.
    Ответ написан
    Комментировать
  • Как обновить docker-compose на prod-сервере, ничего не поломав?

    @holyx
    ДевОпс Сисадмин
    "Проблема в том, что на тестовом сервере версия docker-compose выше, чем на проде, и в этой версии есть --env-file флаг для указания файла "

    А зачем вы используете разные по версиям ПО среды для тестирования/разработки и в проде? Такого быть не должно, если вы конечно не планируете апгрейд прода и обкатываете новую среду, но это уже не проблемы джуна.
    Ответ написан
    1 комментарий
  • Как обновить docker-compose на prod-сервере, ничего не поломав?

    @vitaly_il1
    DevOps Consulting
    Ответ простой - обновляют docker-compose.
    Варианта два:
    1) если прод. сервер один, то просят время на downtime, обновляют, проверяют, возвращают в продакшен
    2) если серверов несколько, то исключают один сервер из сервиса, обновляют, проверяют, подключают заново, и т.д. со следующими
    Ответ написан
    Комментировать
  • Где лучше хранить БД? В докере или нет?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Дополню немного ответ Dr. Bacon, поскольку мне кажется он не так понял ваш вопрос, а вы, возможно, не так поняли суть проблемы.
    Под БД, например постгрес, обычно понимают две разные вещи:
    1) сами данные в файловой системе,
    2) сервер базы данных, который реализует сетевой интерфейс для работы с БД и правильным образом кладёт и читает данные в файловой системе.

    Так вот, сервер можно развернуть ка кна хостовой машине (как вы сказали "локально"), так и в докер-контейнере.
    Файлы БД можно разместить как в файловой системе контейнера, так и в локальной файловой системе, примонтированной внутрь контейнера.
    И тут полно нюансов.
    Давайте начнём с того, как правильно.
    Правиьным будет взять стандартный докер-образ сервера БД, сконфигурировать его через компоуз-файл, а размещение файлов БД примонтировать в виде отдельного volume.

    Что имел в виду Dr. Bacon. Он имел в виду, что если не монтировать файлы БД в volume, то они будут лежать внутри контейнера, а значит при его перезапуске все данные будут стерты, поскольку состояние файловой системы контейнера не принято хранить. Это одно из преимузеств докера - сделал образ унаследовав его от других образов, а потом при запуске контейнера он какждый раз как новенький.
    Ответ написан
    Комментировать
  • Как использовать форк пакета в Го?

    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 комментарий
  • На какой связке лучше всего создавать Websocket?

    @Vitsliputsli
    Подскажите на каком языке лучше всего Websocket? чтобы он был менее затратны в производительности и более всего понятен для изучения? :)

    Go.

    прочитал, что могут быть разные утечки памяти, если на php делать

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

    Ну тут либо json (было бы хорошо, если СУБД поддерживает их нативно и можно построить индекс по содержимому json)

    Либо паттерн Entity-Attribute-Value (загугли)
    Ответ написан
    Комментировать
  • Что значит запрет на оказание IT-услуг?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Вводят какие-то санкции, где России перестанут оказывать IT услуги, что это значит? Я не смогу зайти на иностранные сайты, например YouTube, не смогу купить Windows, не смогу скачивать иностранное ПО?


    Какие-то это вполне явные.
    Могут отказывать в регистрации разработчикам из РФ, прекратить выплачивать на счета РФ - это касается тех, кто публикуется в маркетах (apple market, google market, Steam и др)
    MS прекратила работу с РФ, это значит что не будет новых ноутбуков которые официально идут в РФ с предустановленной Windows
    Нельзя будет официально обновить/купить винду и другие продукты, вплоть до закрытия аккаунтов в office365

    Насколько сильно будут закручивать гайки - неизвестно, ситуация меняется.
    Насколько долго - знает только один неадекватный человек.
    Ответ написан
    Комментировать
  • Почему apt-get не находит пакет polipo?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Polipo ceased to be maintained on 6 November 2016 due to the increasingly widespread use of encryption (i.e. HTTPS) making caching proxies obsolete.

    Так что только самостоятельно собирать из исходников и самостоятельно бороться со всеми проблемами при такой сборке.
    Ответ написан
    Комментировать
  • Почему apt-get не находит пакет polipo?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Почему бы не загуглить, в каких версиях Убунты есть интересующий вас пакет?

    https://packages.ubuntu.com/search?keywords=polipo
    Ответ написан
    4 комментария
  • В каких случаях логичней чтобы получить половину умножать на 1/2, а в каких делить на 2?

    @res2001
    Developer, ex-admin
    Есть такие микроконтроллеры, где нет аппаратного деления. Оно там реализовывается программно и работает оооочень долго. Вот прям заметно дольше. И если деление на константу идет в цикле, то в таком случае выгоднее один раз перед циклом вычислить 1/2, а затем умножать на результат деления. 1/2 тут для примера, конечно.
    С подобными процами лично сталкивался и был неприятно удивлен фактом такой просадки производительности на делении.
    В общем случае, даже на современных настольных процах от интел или амд операция деления выполняется дольше умножения. Счет идет на несколько процессорных тактов. Иногда это может играть роль.

    Если же речь о целочисленном делении на 2, то тут эта операция заменяется сдвигом вправо на 1 бит, что работает быстрее и умножения и деления. Впрочем подобные вещи компилятор сам в состоянии сделать при включенной оптимизации.
    Ответ написан
    Комментировать
  • Тип с точностью до 4 знаков C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Есть. Называется int. Вам надо хранить количество десятитысячных в числе. Иными словами, вы вместо x храните в int x*10000. При выводе делите на 10000 (и установите выводить 4 знака).

    Такие числа можно просто складывать и вычитать. При умножении надо будет результат поделить нацело на 10000 (или округлить к ближайшему, делящемуся на 10000 и потом отбросить 4 нуля). При делении - наоборот. Надо сначала домножить числитель на 10000, а потом поделить нацело на знаменатель (возможно стоит подумать об округлении к ближайшему целому).

    Upd: И вообще, раз уж разговор о C++, то можно реализовать свой класс. Там можно даже отдельно хранить целую часть и 4 знака после запятой. Если вам встроенной точности int/int64_t не хватает. Все математические операции можно переопределить и работать, как со встроенным типом. Вообще, по-умному, это называется fixed point numbers.
    Ответ написан
    Комментировать
  • Где разместить домен для переадресации на основной сайт?

    не нужно его нигде размещять. размести его там же где и твой сатйт aliase (псевдоним,зеркало) и все
    так в коде
    ServerName test1.loc
      ServerAlias test2.loc www.test2.loc www.test1.loc

    или в веб панели есть место где можно его добавить
    isp8.png
    на скриен видешь где домены, просто проииши на этом же днс сервере новый домен
    А но отдельный сайт не создавай.
    в результате у сайта появится зеркало
    ну и в .htaccess просто поставь редирект.
    Ответ написан
    2 комментария
  • Перенаправление 80 http на 444 https?

    @dronmaxman
    VoIP Administrator
    > 80 порт по протоколу http перенаправить на нестандартный порт https?
    Почему бы не переложить эту роль на плечи прокси (nginx). Ставим на входе nginx, он может делать редирект с 80 на 443 и разделить трафик на одном порту на основании домена.
    webmail.domain.ru - все на почтовик
    cms.domain.ru - на сms

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

    Проблема 444 в том, что все браузеры будут ругать на недоверие к сертификату.
    Ответ написан
    8 комментариев