Задать вопрос
  • Как дешифровать данные полученные при сканировании штрих-кода с полиса ОМС?

    @dima20155
    you don't choose c++. It chooses you
    Сложно говорить о каком-то решении, когда вы не приводите ни единого примера. Ни модели сканера, ни примеров штрих-кода, ни формата штрих кода и каракуль, которые получаете. Ни то какие каракули при каком способе получения.
    На счет COM порта сразу вопрос: а правильно ли выбран baud rate.
    Чтобы как-то решить проблему начните (если ещё не начали) с контрольного обзарца. Также, попробуйте простые примеры из интернета, например cv2 распознать и сравнить. Также есть библиотека barcode. Попробуйте её.
    Ответ написан
    Комментировать
  • Есть ли простое и быстрое решение определить, что фраза изменена незначительно?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    это классическая задача. Решается через расстояние Левенштейна
    Ответ написан
    1 комментарий
  • Законно ли брать png материалы из интернета и использовать их в своих работах а также продавать?

    freeExec
    @freeExec
    Участник OpenStreetMap
    У каждой работы есть автор(ы). Он может разрешить на определённых условиях использовать его работы. Если ты их соблюдаешь, то всё ОК, если нет, то как пример можешь посмотреть уголовное дело автора NGINX.
    Ответ написан
    1 комментарий
  • Как оптимизировать задачу?

    GigaLORDex
    @GigaLORDex
    Бизнес-Системный аналитик
    Я бы еще уточнил по бизнес-процессу, а действительно ли надо каждые 6 часов дергать всех клиентов и запрашивать по ним, как вариант, можно пойти таким путем:
    - Первично дергаем всех клиентов (50к) и проверяем на долг.
    - Далее каждые 6 часов запросом дергаем только тех клиентов, по которым были взаиморасчеты. (ведь в базе могут быть клиенты, с которым взаиморасчеты уже 5 лет никто не вёл, они исторически там лежат, зачем по ним каждый раз запрашивать)
    Ответ написан
    Комментировать
  • Как оптимизировать задачу?

    Lorien_Elf
    @Lorien_Elf
    Keep calm and drop database
    Я сварщик ненастоящий, но вижу два пути:
    - Отсылать на сервер данные массивом, а не поштучно.
    - Отправлять штучные запросы параллельно.

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

    martin74ua
    @martin74ua
    Linux administrator
    Используйте ssh-agent'а
    Пароль надо будет ввести один раз в сеанс, дальше агент предоставит ssh соединениям ваш ключ
    Ответ написан
    3 комментария
  • Как автоизвлечь все изображения из pdf документа?

    Adamos
    @Adamos
    Под Linux есть специализированная утилита pdfimages в пакете xpdf. Открытая, бесплатная и надежная.
    Под окошками - какие-то платные комбайны и, конечно, Акробат Про.
    Ответ написан
    Комментировать
  • Как удалить то, что устанавливает sudo sensors-detect?

    @pfg21
    ex-турист
    sensors-detect осматривает систему и ищет известные модули измерения параметров, потом пишет в /etc/modules модулей ядра которые надо догружать.

    sensors показывает измеренные значения (если модули подгружены)

    /etc/sensors настраивает отображение и рабочие пределы.

    да, удаление lm-sensors вырежет подсистему отображения значений.
    набор файлов устанавливаемых файлов пакета можно посмотреть в нем. обычно установленные пакеты сохраняются в /var/cache/apt/archives
    Ответ написан
    Комментировать
  • Какая БД не помрет в облачном диске?

    Stalker_RED
    @Stalker_RED
    Если бд копируется просто как "папка с файлами", то да, она может сломаться, если она копируется в "неподходящий момент". Частично от этого можно спастись журналированием, но это не точно.

    Чтобы не ломалась надо либо корректно останавливать ее перед копированием, либо использовать встроенные в БД средства репликации или синхронизации.

    Важно, чтобы была возможность работать с актуальной БД оффлайн.

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

    В какой-то момент может оказаться, что вам проще не изобретать велосипед, а применить какое-то проверенное взрослое решение - код в гите, докер-контейнеры, автоматический деплой, миграции для БД.
    Порог входа конечно повыше чем просто забросить папку в дропбокс, но зато эти пункты уже можно вписывать в резюме :)
    Ответ написан
    Комментировать
  • Как получить из pdf файла информацию о character spacing и word spacing?

    Adamos
    @Adamos
    Задумался, есть ли в языке Postscript, лежащем в основе PDF, вообще команды разбивки букв и слов.
    Проверил, таки есть: ashow и widthshow соответственно.
    Так что теоретически можно конвертировать PDF обратно в PS и просто прочитать значения перед нужной командой.
    Но не факт, что та программа, которая создавала PDF, использовала эти команды, а не просто раскидала глифы / слова по отдельным выводам с точными координатами.
    Ответ написан
    Комментировать
  • Является ли сообщение, отправленное по Viber, SMS-сообщением?

    @rPman
    определения нужно искать не на вики а в rfc5724
    гугл показывает это, как я понял тут обсуждение ведется и трекается история

    Там в т.ч. четко определен и формат и способ передачи и прочее прочее

    Viber сообщение под это не поподают
    Ответ написан
    Комментировать
  • Как вычислить виновника из-за которого отваливается интернет с какой-то периодичностью в маленькой сети?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Такого рода проблемы все и всегда решаются однотипно.
    1. Необходимо сформулировать критерии наличия проблемы.
    Как именно пропадает интернет, насколько часто, как надолго. Это нужно для диагностики. поиска причины и определения ушла ли проблема после принятия каких либо мер.
    2. Делить проблему на части и проверять части по отдельности.
    Самый эффективный способ делить - это пополам. Отсекаем часть сети и проверяем наличие проблемы в обеих частях (если есть возможность) или в одной из частей.
    3. Когда найден минимальный проблемный участок, который уже нельзя или бессмысленно делить - заменяем его.
    4. Помним, что чаще всего сложные проблемы - это композиция нескольких более простых. которые по отдельности могут не проявляться. В вашем случае может быть проблема, связанная с нагрузкой на роутер, например, которую создает один из услов из-за плохого контакта обжима и большого объёма биттых пакетов. Устранив одну из причин, вы, может быть, сделаете проявления проблемы реже, но не устраните её полностью. К примеру, если замените ротуер, битые пакеты будут всё равно будут нагружать вашу сеть и портить ее производительность, но это будет не так очевидно. Переобжав коннектор вы избавитесь от части нагрузки, но еслив ваш ротуер работал на переделе, то лишний вафай-клиент или тяжелый видос в сети сможет его снова нагрузить до критического снижения производительности.

    Итак, пробежимся по перечисленным пунктам сначала.
    1. Критерии. Поиск критериев - это часть решения. Обычно в этом случае нуно сорать необходимую статистику. Есть куча софта, который это умеет делать, но пинг есть всегда под рукой.
    Для этой тулзы есть две полезных опции: ключ для бесконечного пинга и размер пакета.
    В разных ОС эти ключи немного разные, поэтому ищите их отдельно, у меня нет винды под рукой, поэтому не стану на этом заострять.
    Скаж лишь, что пинговать лучше большими пакетами, жалетально превышающими размер TTL, прописанный в роутере. Тогда такой пинг будет реже проскакивать в периоды хорошей связи, то есть выловит больше пролблем.
    Пинговать нужно в отдельных окнах сразу несколько хостов:
    - ya.ru - этот хост всегда отвечает на пинги и выявит проблемы с DNS
    - 8.8.8.8 - это гугловый DNS-сервер, тоже всегда отвечает на пинги, покажет, что связь с инетом есть даже если DNS, прописанныйна компе не правильно работает.
    - 192.168.0.1 - или какой там IP у вашего роутера. Нужно. чтбы отделить проблемы с инетом от проблем с внутренней связностью до роутера
    - 192.168.0.x - ip одного из компов в сети. Я обычно пингую несколько компов, доступных через баксимальное число потенциально проблемных узлов - ethernet-розеток, свичей, вайфай-соединений... Этот пинг поможет понять где проблема, во внутрисетевой связности или в последней миле.

    Учтите, что проблемы часто бывают комбинированные и каждое сочетание симптомов будет свидетельствовать о раных проблемах.
    Да, тревожным принаком может служить не только пропадание пакетов, но и скачки в длительности их возврата, особенно если такие длительности достигают 500мс и выше. Но и скачки от 3мс до 250мс тоже будут свидетельствовать о каких-то проблемах.

    Запускать пинг на всех компах лучше одновременно и на некоторое время. Например минут на 20. Потом по статистике будет видно сколько где пакетов пропало.

    2. Если критерии наличия проблемы позволяют, то можно попробовать отрубать части сети и смотреть наличие проблемы. Это я в том смысле, что если проблема происходит в среднем раз в пару-тройку часов, то отрубать на многие часы части сети при диагностикем ожет быть неприемлемым.
    Редкеи пробемы дольше отлавливать. Но напоминаю, что критерии можно детализировать, ведь если пакеты у вас пропадат относительно редко, то скачки времени их возврата могут случаться чаще и подсвечивать проблему. Также можно сделать рамер пакета близким к максимальному, это должно тоже в некоторых случаях участить проявление проблемы.
    Иногда не мешает нагрузить сеть комированием по локалке большого файла. В линуксе можнно с помощью утилиты tc послать большой поток рандомных байт на любой сокет..
    3. Плавающие проблемы случаются из-за плохого обжима, перебитого жверью кабеля, перегрызенного UTP в плинтусе, из-за умиращих конденсаторов в блоке питания роутера (БП может не выдавать необходимого при нагрузках тока, но вольтметром такая неисправность не будет различима без нагрузки). Вообще старые (да и не только) роутеры могут страдать поплывшими электролитическими конденсаторами не только в блоках питания.
    Хорошо, когда можно подменить роутер.
    4. ну с четвертым пунктом ничего не пососветуешь, только разделать и тестировать все по отедльности и в разных сочетания и да поможет нам ктулху.

    А для тех, кто дочитал этот опус до конйа - интересная задачка. Что пингуют эти команды, как и почему?
    ping 1.1
    ping 2130706433

    Тех, кто знает, попрошу не спойлерить=)
    Пусть для кого-то будет сюрпризом этот дивный мир=)

    UPD. Простите за адское количество опечаток в тексте. Писал в спешке и с непривычной клавиатуры. Исправлю всё попозже. Не ожидал, что многим ответ придётся по душе. Вроде ж накапитанил как мог.
    Ответ написан
    5 комментариев
  • Можно ли сжать файлы игры оставив игру работспособной?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В 2000-е на прилавках рынков мне как-то попался в руки CD диск (700Мб) где пираты вкатали аж 4 игры
    (кажется был Quake Ground Zero, KingPin, Blood ,,, и еще какаято).
    Веселое время было. И студии были такие как "Фаргус" и 1С и прочее. Переозвучкой игр занимались.
    Позже другие странные личности (паблишеры) делали такие вот релизы. Но интересно другое.
    В оригинале каждая игра занимала по сидюку. Вопрос- Как? Ответ простой - сжали аудио.
    Тогда игра занимала 100-150 Мб. А остальное - аудиотрек. Вот они взяли аудио (wav обычно или чистый трек)
    сжали в mp3. А при инсталляции - тупо запукалась утилита наподобие bladeencoder и прямо распаковывала
    музло на диск. Прям в логах было видно чем она занята. Вот такой трюк.

    С игрой в 13Гигов надо просто понять из чего эти гигабайты складываются. Если cinematics или музло - то
    иногда его можно удалить и игра себе идет нормально. А иногда и падает с ошибкой. В общем успех зависит
    на 99% как разработчик защитил игру. Бесплатные и indy-games обычно никак не защищаются. А дорогие
    имеют по 5 степеней защит.
    Ответ написан
    3 комментария
  • Как мне загрузить больше 24000 документов?

    @rPman
    И где код?

    Смотреть ошибки импорта, проверять сообщения об ошибках.

    В 99% случаев работы с csv у новичков и не только в самостоятельном парсинге csv файла и не знании что в его стандарте есть возможность размещения символа \n внутри строк, т.е. одна запись может быть размазана на несколько строк файла.
    Ответ написан
    Комментировать
  • Как одновременно прочитать построчно два файла?

    @Wirusnyy-chel
    Из комментариев под вопросом:
    нужно из файла взять подстроку после : и проверить существует ли подстрока из 1 файла в подстроке файла 2(до :) и если она есть, то записать строку в виде: подстрока из 1 файла: подстрока из 2 файла

    размеры файлов до 1гб


    Быстрым будет вариант с мапой из ответа выше, но он будет потреблять достаточно много памяти и ищет только прямые вхождения подстроки 1 в подстроке 2.

    Предлагаю вариант с меньшим потреблением памяти
    file1, err := os.Open(config.First_file)
    if err != nil {
      log.Fatalln("error")
    }
    defer file1.Close()
    file1Scanner := bufio.NewScanner(file1)
    
    file2, err := os.Open(config.Second_file)
    if err != nil {
      log.Fatalln("error")
    }
    defer file2.Close()
    file2Scanner := bufio.NewScanner(file2)
    
    // находим все доступные подстроки из файла 2
    file2SubSrings := make([]string,0)
    for file2Scanner.Scan(){
      file2SubSrings = append(file2SubSrings, strings.Split(file2Scanner.Text(), ":")[0])
    }
    
    for file1Scanner.Scan() {
      file1SubString := strings.Split(file1Scanner.Text(), ":")[1]
      for _, val := range file2SubStrings{
        if strings.Contains(val, file1SubString) {
          log.Println(file1SubString, ":", val)
          break
        }
    }
    
    if err := file1Scanner.Err(); err != nil {
      log.Fatalln(err)
    }
    
    if err := file2Scanner.Err(); err != nil {
      log.Fatalln(err)
    }


    UPD Вариант с параллельностью
    func scanFiles(file1, file2 *bufio.Scanner) {
    	// находим все доступные подстроки из файла 2
    	file2SubStrings := make([]string, 0)
    	for file2.Scan() {
    		file2SubStrings = append(file2SubStrings, strings.Split(file2.Text(), ":")[0])
    	}
    
    	wg := new(sync.WaitGroup)
    	valChan := make(chan string)
    	for i := 0; i < 5; i++ {
    		wg.Add(1)
    		go findIntersections(valChan, file2SubStrings, wg)
    	}
    
    	for file1.Scan() {
    		valChan <- strings.Split(file1.Text(), ":")[1]
    	}
    
    	wg.Wait()
    }
    
    func findIntersections(values chan string, file2SubStrings []string, wg *sync.WaitGroup) {
    	for {
    		file1SubString, ok := <-values
    
    		if !ok {
    			wg.Done()
    			return
    		}
    
    		for _, val := range file2SubStrings {
    			if strings.Contains(val, file1SubString) {
    				log.Println(file1SubString, ":", val)
    				break
    			}
    		}
    	}
    }


    UPD2
    строка из файла 2 - 663624e4aae0164132f10f09fdd9fcd2:liberty_
    строка из файла 1 - scherbakovatd@example.com:663624e4aae0164132f10f09fdd9fcd2
    на выходе должно выйти scherbakovatd@example.com:liberty_

    func scanFiles(file1, file2 *bufio.Scanner) {
    	scanWg := new(sync.WaitGroup)
    	scanWg.Add(2)
    
    	file1SubStrings := make(map[string]string)
    	file2SubStrings := make(map[string]string)
    
    
    	go func() {
    		var substr []string
    		for file1.Scan() {
    			substr = strings.Split(file1.Text(), ":")
    			file1SubStrings[substr[1]] = substr[0]
    		}
    		scanWg.Done()
    	}()
    	
    	go func() {
    		var substr []string 
    		for file2.Scan() {
    			substr = strings.Split(file2.Text(), ":")
    			file2SubStrings[substr[0]] = substr[1]
    		}	
    		scanWg.Done()
    	}()
    	
    	scanWg.Wait()
    	
    	
    	wg := new(sync.WaitGroup)
    	valChan := make(chan struct{k,v string})
    	for i := 0; i < 5; i++ {
    		wg.Add(1)
    		go findIntersections(valChan, file2SubStrings, wg)
    	}
    
    	for k, v := range file1SubStrings {
    		valChan <- struct{ k, v string }{k: k, v: v}
    	}
    
    	wg.Wait()
    }
    
    func findIntersections(file1Values chan struct{ k,v string}, file2 map[string]string, wg *sync.WaitGroup) {
    	for {
    		file1, ok := <-file1Values
    
    		if !ok {
    			wg.Done()
    			return
    		}
    		
    		if file2Value, ok := file2[file1.k];ok {
    			log.Println(file1.k, ":", file2Value)
    		}
    	}
    }
    Ответ написан
  • Как сжать файл?

    xez
    @xez
    TL Junior Roo
    Никак. Архив - это не исполняемый файл.
    Ответ написан
    1 комментарий
  • Как сжать файл?

    @Wirusnyy-chel
    Если нужно уменьшить размер бинарника который собирается гошкой https://habr.com/ru/company/plesk/blog/532402/

    Если хотите сжимать файлы для пересылки/хранения то перед использованием их нужно распаковать.
    Ответ написан
    Комментировать