• Как освободить место на компьютере?

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Скрипт на питоне написать, если умеешь.
    Если не умеешь, можно в экселе соорудить таблицу и сконкатенировать формулами командные строки, которые "попробуют" распаковать каждый архив каждым паролем.
    Можно составить команду таким образом, что после успешной попытки сам архив будет удалён. Так можно наделать кучу батников (или шелл-скриптов) по одному на каждый архив и этот батник будет перебирать пароли.
    Нужно всего лишь почитать хелп к параметрам командной строки архиватора и составить команду по шаблону с паролем.
    Ответ написан
    2 комментария
  • Как автоматизировать установку приложений в Ubuntu (vps)?

    deepblack
    @deepblack
    В самый раз освоить Ansible

    Ansible is a radically simple IT automation system. It handles configuration management, application deployment, cloud provisioning, ad-hoc task execution, network automation, and multi-node orchestration. Ansible makes complex changes like zero-downtime rolling updates with load balancers easy.
    Ответ написан
    Комментировать
  • Как максимально надёжно скрыть свой IP адрес?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Если сможете обеспечить 3 вещи: 1. однозначно завернуть 100% трафика с ноутбука в VPN, 2. Организовать полный запрет для выхода ноутбука в Интернет не через ВПН (в случае его обрыва например) 3. обслуживание роутера дома (перезагрузку и т.п.) - первый вариант вполне рабочий. Но все зависит от того, какую именно информацию собирает ваг работодатель.
    Ответ написан
  • Почему архиваторы не эффективно сжимают одинаковые файлы?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Хотите эффективно сжать бэкап - делайте не -Fc (который кое-как сжат сам по себе - поэтому и ваши архиваторы не осилили), а -Fp - и натравливайте на получившееся что-нибудь типа xz -9.
    Ответ написан
    1 комментарий
  • Почему архиваторы не эффективно сжимают одинаковые файлы?

    @4144
    Попробуйте программы для создания бэкапов. Обычно они дедуплицируют данные и сжимают их.

    На пример zbackup на хвод принимает tar и сохраняет в своей директории пожатые данные.
    borgbackup немного хуже сжимает, но предоставляет доступ к отдельным файлам, без распаковки всего бэкапа. Также сохраняет в своей директории.
    Ответ написан
    1 комментарий
  • Как связать ZWJ и соответствующую OpenType фичу?

    @roqin Автор вопроса
    Трепыхаюсь потихоньку
    Ну раз никаких предложений ни от кого не поступило, я решил эту задачу в лоб: создал стандартную лигатуру (liga), причём как с необходимыми символами, так и с символом ZWJ (он оказывается уже имеет стандартизированное имя - afii301 ).

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

    637a98b02c533682504590.png

    Может быть кому-нибудь это будет интересно.
    Ответ написан
    Комментировать
  • Как проверить строку, чтобы узнать, можно ли её парсить?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    try { 
        const rq = JSON.parse(data)
    } catch (err) {
        console.log('error:', err)
    }
    Ответ написан
    Комментировать
  • Как исправить ошибку при запуске пайтон дискорд бота на хероку?

    @Purpleee Автор вопроса
    Решил уже сам. Всем кто с такой проблемой столкнулся вот мои импорты.

    import pip
    import discord
    from discord.ext import commands
    from discord import option
    import random
    from asyncio import sleep
    import asyncio
    Ответ написан
    Комментировать
  • Какой самый быстрый дистрибутив Linux для программирования?

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

    Резюмируя, причины могут быть такие (именно в таком порядке):
    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 без опыта?

    vabka
    @vabka
    Токсичный шарпист
    Устроиться без опыта - можно, если твои навыки отвечают требованиям работодателя и ты в итоге попал на этап с техническим собеседованием, чтобы это доказать.
    Ответ написан
    Комментировать
  • Как обновить 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, то они будут лежать внутри контейнера, а значит при его перезапуске все данные будут стерты, поскольку состояние файловой системы контейнера не принято хранить. Это одно из преимузеств докера - сделал образ унаследовав его от других образов, а потом при запуске контейнера он какждый раз как новенький.
    Ответ написан
    Комментировать