Задать вопрос
  • Есть ли подводные камни у разворачивания на хостинге продуктов mySQL Workbench?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Эти ваши "гуру" просто ничего кроме примитивного PHPMyAdmin'а не знают. База ставится на хостинге, MySQL Workbench на рабочем компьютере. Подключение через ssh туннель, это штатная опция Workbench'а.
    spoiler
    63987fe479f70227963640.png
    Ответ написан
    1 комментарий
  • В чем практический смысл тестирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У багов есть разный impact. Или степень влияния на качество продукта. Вот какое влияние сдвинутых иконок?
    Я думаю их увидели только жители стран которые используют перевод с английского и этот перевод оказался на несколько символов длинее оригинала из-за чего произошел развал дизайна. Можно сказать что аудитория некоторых стран ощутила легкое неудобство.

    Тоесть impact - так себе.

    А что будет если программист 3Д графики допустил ошибку, которая приводит к крашу игры? Тут влияние посильнее. Я-бы сказал что это провал релиза. Как такое пропустили тестировщики (автоматизаторы или ручники) неважно) - ХЗ. Но тут важно срочно бежать в студию и выкладывать на steam экстренное обновление игры. И счет идет не на недели а на считанные дни. Кое-кому из отдела разработки и тестирования придется провести несколько безсонных ночей перед багфиксом.

    Вот в этом и есть практический смыл тестирования. Тестировать важные части логики.
    Ответ написан
    Комментировать
  • В чем практический смысл тестирования?

    @LJ322
    Я редко когда слышал о тесте непосредственно вёрстки, а там где она была, то тестили снепшотами какие-то отдельные статические части.

    Я полюбил тесты после того, когда лично убедился, что они в разы облегчают отладку и поддержку кода. Допустим есть какой-то компонент, который в процессе разработки растёт и увеличивается. Сначала он простой и там надо смотреть как меняется пара значений в зависимости от пары аргументов. Затем он расширяется и начинает взаимодействовать с другими компонентами. И вот со временем получается большая структура с тысячей аргументов и сотнями состояний (в общем). Например функционал оформления кредита в банке, состоящий из 5 шагов. Под него написаны тесты. И вам надо внедрить новое свойство на 2 шаге, которое будет ещё в 3 местах менять другие значения. Запуская тесты, вы либо видите, что всё ок, либо видите на каком этапе что отвалилось. И не приходится в ручную перебирать всевозможные варианты

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

    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 для программирования?

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

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