• Почему так сложно майнить если nounce не больше 4 млрд?

    Ocelot
    @Ocelot
    Рискну предположить, дело в том, что для обработки блока с одним nonce требуется много операций хеширования. SHA-256 "ест" по 512 бит за раз, а размер блока около мегабайта. Плюс в BTC считается двухкратный хеш SHA-256(SHA-256(Data)).
    Но даже с учётом всего этого цифры не сходятся где-то на 2-3 порядка.

    UPD. Нашёл. Помимо nonce, в блок ещё входит timestamp. Его можно менять в довольно больших пределах, не нарушая валидности блока (он должен быть больше, чем медиана времени предыдущих 11 блоков и меньше, чем средне-сетевое время +2 часа). Прогнав весь диапазон nonce и не получив красивого хеша, майнер немного меняет timestamp и прогоняет весь диапазон nonce заново. А потом снова и снова, пока не попадёт.
    Весь диапазон валидных timestamp почти 3 часа ~10^4 секунд. Теперь вроде сходится.
    Ответ написан
    Комментировать
  • Как правильно организовать обслуживание и работу с большой БД?

    Vamp
    @Vamp
    Касательно mysql знаю три варианта:

    1. Утилита pt-online-schema-change. Создаёт пустую копию исходной таблицы, делает на ней alter, копирует данные из исходной таблицы и в конце меняет местами старую и новую таблицы.

    Пользовался этой утилитой пару раз. Хорошо работает.

    2. В mysql 5.6 появилась возможность делать alter без блокировок средствами самой субд. Нужно в alter добавить парочку новых параметров:
    ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
    Этот вариант я сам не пробовал, поэтому прокомментировать не могу.

    3. Самый сложный вариант с использованием двух инстансов mysql, связанных master-master репликацией:

    1. Делаем alter на втором сервере
    2. Ждём, когда второй сервер догонится по репликации
    3. Переключаем сервис на вторую базу
    4. Ждем какое-то время, смотрим, нормально ли приложение работает с новой схемой, нет ли деградации или ошибок
    5. Делаем alter на первой базе
    6. Ждём догона репликации
    7. Возвращаем сервис на первую базу

    С этим вариантом я работаю постоянно. Выглядит просто, но на деле много нюансов.

    Нужно обязательно пропускать alter мимо репликации:
    SET sql_log_bin = 0;
    ALTER TABLE tbl_name ...;
    Важно не забыть про sql_log_bin = 0, иначе alter по репликации переедет на соседний сервер и залочит таблицу уже там. А переключать сервис нельзя, пока репликация не догонится.

    Если меняется структура таблицы - добавляется/удаляется колонка или меняется их порядок, нужно обязательно проследить чтобы тип репликации обязательно был STATEMENT. Иначе репликация приляжет на первом же запросе в формате ROW с примерно такой странной ошибкой:

    Column 25 of table 'mydb.mytable' cannot be converted from type 'varchar(255)' to type 'bigint(20) unsigned'


    А со STATEMENT нужно следить чтобы приложение нигде не понижало уровень изоляции ниже REPEATABLE READ, иначе получит ошибку:

    Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
    Ответ написан
    Комментировать
  • SQLite3 выдаёт ошибку при записи значения. В чём причина?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Точки имеют специальное значение в SQL запросах. Никто не делает SET ip = "+z+" WHERE, и даже format не делают, и f строки тоже не используют

    Читайте хоть документацию как работать с sql, наугад зачем
    https://www.sqlitetutorial.net/sqlite-python/update/

    Это тоже
    if res == [(None,)] or [(''),]:

    cursor.execute("UPDATE ip_adress SET ip = ? where rowid = 1", (z,))
    db.commit()
    Ответ написан
    1 комментарий
  • Возможно ли автоматизировать ежедневный отчет?

    @rPman
    Майкрософт офис позволяет делать загрузку данных на страницу по запросу в sql базу данных, в экселе там для этого есть целый gui - data connection wizard.

    Скрипты sql у тебя есть, максимум сделать так чтобы переменные (дата для отчета например) брались из какой-нибудь таблицы в самой базе (так будет проще).

    Программировать в экселе невероятно просто и сложно одновременно. Сложно - даже уже знакомому с программированию некоторые вещи там реализованы странно и неудобно. Просто - потому что есть готовый генератор кода - ты нажимаешь кнопку - старт записи макроса, затем делаешь действия клавишами мышкой и прочими, затем жмешь - остановить запись макроса и смотришь cгенерированный код (даже такие команды как сохранить файл как). Этот подход позволяет понять, какой код нужно делать на какие действия, практически без копошения в неудобной документации.

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

    Итого, задача построения отчетов будет сводиться к правке нужных параметров отчета в базе данных (консольные утилиты oracle для выполнения скриптов например либо из той же программы на excel, так как там в макросах можно делать полноценные формочки с кнопочками), каким то образом указанию имени файла для сохранения результирующего отчета и открытию файла-шаблона.

    p.s. автоматизация работы с excel макросами для неофитов выглядит как магия - открывается документ, в нем прямо на глазах начинают появляться данные сохраняться и открываться новые файлы (да эксель невероятно медленный, на столько что это видно человеку).
    Ответ написан
    Комментировать
  • Насколько эффективно последовательное соединение (по подзарядке) powerbank?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Если КПД 90% (на вход и выход), то 3 повербанка по 10А*ч по такой схеме дадут:
    3й - 10000*0,9 =9000 (разряд 3го)
    2й - 10000*0,9*0,9*0,9 = 7290 (разряд 2го, заряд 3го, разряд 3го)
    1й - 10000*0,9*0,9*0,9*0,9*0,9 = 5904,9 (разряд 1го, заряд 2го, разряд 2го, заряд 3го, разряд 3го)

    Итого 22195мАч или 74% полезной ёмкости.

    Вот таблица для расчёта

    6054ca1985505545370083.png
    Ответ написан
    1 комментарий
  • Как спарсить все артикулы со страницы с бесконечным скроллом на Beautifulsoup + Selenium?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Скролить категорически не рекомендую! Представьте, что там +100500 страниц. И если скролить, через некоторое время закончится оперативка, и кроме парсера, зависнет еще и компьютер.

    Вместо этого, лучше к ссылке добавить параметр "?page=1" - где число - номер страницы. И в цикле увеличивать число, пока на странице не появится текст вроде - "В этой категории нет ни одного товара."
    Ответ написан
    1 комментарий
  • Как заставить сервер c 2xE5-2630 v4, 128GB, raid ssd грузить процессор на 100% (тест Гилева 21,65)?

    Mikhail_E
    @Mikhail_E
    1С, SQL
    1. Загрузить процессор на MSSQL можно так :
    - Должна быть задача на SQL серваке, которая потребует этих ресурсов (в простое или при малых задачах SQL проц не загрузит)
    - Ставим параллелизм = количеству ядер
    - Ставим Стоимостной порог в 0.
    После завершения текущих проверок, советую вернуть MAXDOP/MaxThreshhold на (1/4 или 1/8 от количества ядер а порог выявить методом проб и замеров). Дело в том, что загрузка проца 100% не значит что всё будет быстрее (только в некоторых случаях типа проверки целостности). Т.к. при распараллеливании запросов по ядрам, появляются "Накладные расходы" на распараллеливание и сбор обратно результатов воедино. Это будет выглядеть как ожидания CXPACKET и Latch. (См "закон Амадала" + CXPACKET в гугле)
    2. "Проверка целостности базы данных" - на ежедневной основе смысла не имеет, особенно если база достаточно крупная. Её имеет смысл делать или при возникновении проблем, или раз в квартал/месяц ... зависит от размеров базы. UPD: Лучше всё же её делать, если позволяет размер и тех. окно. Т.к. можно упустить ошибку целостности и перенести её в бэкап.
    3. Если есть проблемы с производительностью, это вопрос не простой, и требует кучу опыта. Навскидку рекомендую сначала проверить :
    - Нагрузку на дисковую подсистему, и если там будет проблема (Очередь к диску более 2 в среднем) выполнить разнесение *.mdf, *.log, tempdb, инстанс кластера 1c серверов на отдельные диски.
    - Нагрузку на оперативку от MSSQL (можете гуглить это может вызывать большую активность IO на дисковую подсистему)
    - Проверить способ коннекта к MSSQL ("Shared memory" должно быть "on" и использоваться, если 1с сервак и mssql сервак физически на одно машине .. это +10% к производительности.
    ну и куча чего ещё ... в одном посте всего не расписать.
    и т.д. вариантов очень много.
    главный совет: решайте проблемы , только если она есть и мешает, если это лично ваше мнение, а пользователям не мешает, лучше делайте настройки по дефолту (см. APDEX, анализ производительности)
    UPD: И да, виртуалки для 1C + MSSQL = зло, и не потому что "фирма 1С плохая", а потому что у вас не сможет 1С и MSSQL не сможет общаться через оперативку, и между оператором чтения на MSSQL до железа сервера будет 4 прослойки (SQLOS, OS виртуалки, Гипервизор, OS сервера, вместо SQLOS + OS сервера).
    Ответ написан
  • Как здесь работает if not?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    command - строка, все проверки условий в if возвращают bool значение.

    По сути, проверка выглядит примерно так:
    if not bool(command):

    bool от пустой строки вернет False, если строка не пустая - True
    not - логический оператор, который возвращает True, если утверждение не True. В общем возвращает противоположное значение

    Ну то есть
    >>> not True
    False
    >>> not False
    True


    Если вводится пустая строка
    if not bool(command):
    , то условие выглядит как
    if not False:
    (потому что bool от пустой строки возвращает False). В свою очередь, not False возвращает True. В итоге конструкция превращается в
    if True:
    и условие выполняется.

    Если строка не пустая, то соответственно будет if not True и затем if False, условие не выполнилось.

    Так что, если строка пустая - цикл пропускает.
    Ответ написан
    Комментировать
  • Кривая вёрстка на MacOS в Safari?

    sergski
    @sergski
    web-developer
    В Safari для .row:before, .row:after вычисляется ширина width: 1px; а в остальных браузерах width: 0px Эти 2px и ломают верстку.
    Ответ написан
    1 комментарий
  • Как вывести деньги от заказчика?

    nki
    @nki
    bezkart.ru готовая система лояльности
    Работайте в белую и платите налоги.
    Ответ написан
    Комментировать
  • Бюджетная водянка на процессор - стоит ли?

    xez
    @xez
    TL Junior Roo
    Водянка - это для тех, кто не наигрался в конструктор. Дорого, не надежно. Какой-то существенной разницы в температурах или в уровне шума там нет.
    За 70 евро можно купить такие суперкуллеры как GamerStorm Assassin III, Thermalright Macho Rev.B... Еще чуть добавить - вот вам и be quiet! DARK ROCK PRO 4.
    Каждый из них легко справится с вашим процесором и даже шуметь не будет.
    Или раскошелиться на Noctua NH-D15 или Thermalright Silver Arrow IB-E Extreme Rev. B - не каждая водянка их обойдет.
    Я не предлагаю мне верить на слово - посмотрите тесты Thermalright Macho Rev.B и сами решите - стоит ли геморой с водянкой этих градусов.
    Ответ написан
    6 комментариев
  • Хочу купить монитор 144 гц, но не знаю даст ли это сильный прирост или же ничего толком не поменяется?

    @imegaded
    Скажу так, изначально ты можешь этой разницы и не заметить, но потом вернуться на 60гц будет уже невозможно =)
    Ответ написан
    Комментировать
  • Как люди пишут операционные системы?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Есть же, кто пишет дома в одиночку.
    Есть. Это избранные Богом люди(или просто шизофреники). И пишут они ОС для общения с ним.
    Ссылка на хабр - TempleOS: библейская операционная система, которую...
    Ответ написан
    2 комментария
  • Как сделать поиск по регулярному выражению SQL?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    TL;DR: переписывайте базу пока не поздно. Приводите в 3 нормальную форму и будет вам "щастие".

    1) Хранение данных по которым идет поиск в таком виде - это сразу расписаться в своей проф. непригодности, никому не показывайте эту стыдобу.

    2) Разнесите данные нормально по таблицам, не думайте что вы прям "выкрутились" захерачив все в строку и у вас все в шоколаде. Нифига, теперь у вас по этому полю будут кошмарно тормозные запросы, так как самые медленные операции - это лайк и регексп. Тем более по полю с переменной длинной и без нормальных индексов. И все это вместо суперскоростного индекса по интежер полю.

    3) Кроме остальных проблем - теперь вместо просто апдейта поля вам сначала надо его считать, распарсить и только потом обновлять, чтобы не потерять информацию, то есть вы часть стандартной логики бд переносите в код, где ему не место.

    4) ну и на одну из проблем вы уже напоролись - поиск по нечетким данным даст нечеткий результат.
    Ответ написан
    8 комментариев
  • Могу ли я в чистом javascript в асинхронной функции подождать возникновения события?

    lazalu68
    @lazalu68
    Salmon
    Конечно можете. После await у вас должен идти промис, который будет ресолвиться из обработчика события. Если речь о событиях DOM, то как-то так:

    HTMLElement.prototype.waitFor = function(event_name) {
        if (event_name) {
            return new Promise((res, rej) => {
            	const listener = function() {
            		res()
            		this.removeEventListener(event_name, listener)
            	};
    
            	this.addEventListener(event_name, listener);
            })
        } else {
            throw 'No event passed to waitFor method!';
        }
    }
    
    async function foo() {
    	const start = new Date();
    	await document.querySelector('body').waitFor('click');
    	console.log('uspeshno dojdalis clicka, jdali celih ' + ((new Date().getTime() - start.getTime())/1000) + ' sekund');
    }
    
    foo();
    Ответ написан
    7 комментариев
  • С чем связанна проблема кодировки?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ответ.
    Это может быть связано с неправильной работой с кодировками.
    А именно перекодирование происходит:
    - не в ту кодировку
    - не из той кодировки.
    Обычно неопытные программисты не хотят разбираться с тем как правильно работать с кодировками и что такое юникод, а все проблемы решают методом тыка меняя код пока проблема не исчезнет. Из-за этого у них часто присходят преобразования по умолчанию, которые ломаются при смене операционной системы, при запуске другим спообом (из терминала, от имени другого пользователя, через крон...), при смене умолчаний (локали, настроек терминала, настроек БД).
    А ещё такие неопытные программисты до жути боятся сообщений об ошибках, но решать настоящие пролемы не хотят и гасят их в бесшумном режиме, отчего реальные проблемы маскируются под глобальныйми молчаливыми пустыми обработчиками ошибок. Это приводит к усложнению внутреннего поведения программы и вот таки вот случаям, как у вас.
    Когда у таких программистов возникают проблемы (а за ними дело не встанет), то эти программисты не описывают проблему детально, не показывают исходный код, не обрисовывают архитектуру своей системы, а просто спрашивают в чем может быть проблема.
    Исчерпывающий ответ на такой вопрос дать несложно. Вот он.
    Ответ написан
    Комментировать
  • Надёжный SSD и HDD диск?

    Sanes
    @Sanes
    Единичный случай, не показатель. Все ломаются.
    Ответ написан
    Комментировать
  • Какая сейчас лучшая читалка для Windows?

    @argumentvoid Автор вопроса
    Остановился на Sumatra PDF, отредактировав конфиг. Скрыл навигационную панель (чтобы не видеть эти древнейшие иконки) и ещё подправил под себя несколько деталей. На данный момент это лучшее, что смог сделать для своей задачи. Прикрепляю скрин того, как сейчас выглядит книга в этой читалке.5fd9cf036b0ca631731368.png
    Если кому вдруг понадобится, вот конфиг:
    MainWindowBackground = #80fff200
    EscToExit = false
    ReuseInstance = false
    UseSysColors = false
    RestoreSession = true
    TabWidth = 300
    
    FixedPageUI [
    	TextColor = #000000
    	BackgroundColor = #ffffff
    	SelectionColor = #f5fc0c
    	WindowMargin = 2 4 2 4
    	PageSpacing = 4 4
    ]
    EbookUI [
    	FontName = Arial
    	FontSize = 12.5
    	TextColor = #5f4b32
    	BackgroundColor = #fbf0d9
    	UseFixedPageUI = false
    ]
    ComicBookUI [
    	WindowMargin = 0 0 0 0
    	PageSpacing = 4 4
    	CbxMangaMode = false
    ]
    ChmUI [
    	UseFixedPageUI = false
    ]
    ExternalViewers [
    ]
    ShowMenubar = true
    ReloadModifiedDocuments = true
    FullPathInTitle = false
    ZoomLevels = 8.33 12.5 18 25 33.33 50 66.67 75 100 125 150 200 300 400 600 800 1000 1200 1600 2000 2400 3200 4800 6400
    ZoomIncrement = 0
    
    PrinterDefaults [
    	PrintScale = shrink
    ]
    ForwardSearch [
    	HighlightOffset = 0
    	HighlightWidth = 15
    	HighlightColor = #6581ff
    	HighlightPermanent = false
    ]
    CustomScreenDPI = 0
    
    RememberStatePerDocument = true
    UiLanguage = en
    ShowToolbar = false
    ShowFavorites = false
    AssociateSilently = false
    CheckForUpdates = true
    RememberOpenedFiles = true
    EnableTeXEnhancements = false
    DefaultDisplayMode = single page
    DefaultZoom = fit page
    WindowState = 1
    WindowPos = 743 0 1074 1390
    ShowToc = true
    SidebarDx = 0
    TocDy = 0
    ShowStartPage = false
    UseTabs = true
    
    FileStates [
    ]
    SessionData [
    ]
    TimeOfLastUpdateCheck = 0 0
    OpenCountWeek = 519
    Ответ написан
    1 комментарий
  • Внешний HDD перестал работать. Как подключить его к SATA и вообще к ПК напрямую?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    как его можно напрямую подключить к ПК, чтобы проверить рабочий ли он без платы?

    Я уже отвечал здесь на подобный вопрос. Повторю вкратце - если сдохла часть, отвечающая за SATA, то сделать ничего нельзя. Но если неисправен конвертор SATA<->USB, то можно. Для этого надо найти на плате контроллера 5 точек: +Rx, -Rx, +Tx, -Tx и общий минус, и вывести проводами эти выводы на обычный разъём SATA в соответствии с его распиновкой. Найти эти точки не так уж сложно (см. фото по моей ссылке), поскольку SATA-линии имеют характерный узнаваемый вид. Посмотрев на ваше фото платы контроллера, я их уже нашёл.
    Ответ написан
    2 комментария
  • Можно ли сохранить соединение к zip архиву между запросами?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Очередной вопрос из серии "можно ли пить воду носом, потому что я залепил себе рот скотчем. отлепить скотч не предлагать".

    Распаковать архив и не маяться дурью
    Ответ написан
    2 комментария