Это неверный подход к анализу. Из выборки также необходимо исключить те функции, которые ничего не возвращают (процедуры, которые не задеклалированы в языке). А почти треть всех функций с error все же значимая часть кода, несмотря на пример с `fmt.Println()`, который больше исключение подтверждающий правило.
В целом направление интересное и возможно верное, хотя check станет самым частым словом в теле функции как в примере выше. Хоть и укорачивает, но слегка нечитабельно.
Возможно, как вариант вообще избавиться от слова check, введя дополнительный вид присваивания? Например, так:
func printSum(a, b string) error {
x ~ strconv.Atoi(a)
y ~ strconv.Atoi(b)
check fmt.Println("result:", x + y)
return nil
}
Где `~` есть эквивалент `:= check`. Или вот так, получше вариант:
func printSum(a, b string) error {
@x := strconv.Atoi(a)
@y := strconv.Atoi(b)
check fmt.Println("result:", x + y)
return nil
}
Отличная работа! Тоже брался взломать sha256 (или оптимизировать алгоритм перебора nonce хотя бы кратно). Начало статьи — как собственные действия. Классная идея и пища для анализа изменения единичных битов. Текст знаком духом :)
Однако я пришел к выводу, в конце концов, что, и за это необходимо сказать спасибо дальновидности Сатоши, любой анализ nonce бессмыслен в силу двойного sha; все было во много раз легче (хуже для биткоина), если бы заголовок хешировался однократно.
Ваш вероятностный подход прекрасен, но скорее всего только как попытка. Поскольку смешение битовых и арифметических действий в раундах дают то свойство функции, когда выявленное свойство работает на одних входных, но не работает на других.
Автор выше реализовал синглтон. Переменная config в целом не глобальна, т.к. начинается не с Заглавной буквы, и видима только внутри какого-то своего пакета.
Спасибо за комментарий, с этим можно согласиться.
Не подскажите по второму примеру, даны 3 дроби: 3/3 0/1 -5/5. Ответ тоже «Yes», но где здесь такое произведение двух дробей, дающее третью дробь? %)
# Запрет на открытие в iframe
add_header X-Frame-Options SAMEORIGIN;
# Блокировка путей, начинающийся с точки (например, ".git", ".svn")
location ~ /\. {
deny all;
}
# Большинство хакерских сканеров
if ( $http_user_agent ~* (nmap|nikto|wikto|sf|sqlmap|bsqlbf|w3af|acunetix|havij|appscan) ) {
return 403;
}
В качестве оптимизации дисковой нагрузки, можно упомянуть отключение логов:
for i in `find ./* -type f -name '*.js'`; do echo $i; gzip -c -9 $i > $i.gz; done;
for i in `find ./* -type f -name '*.css'`; do echo $i; gzip -c -9 $i > $i.gz; done;
Не понимаю почему вас минусуют, замечание вполне уместное.
Мне тоже не ясна причина производительности с использованием go-рутин на 1 ядре. Ведь количество шагов, инструкций процессора будет одинаковым, без разницы в каком порядке будут выполнены go-подпрограммы и на какое количество псевдо-потоков разделится программный код.
В чем именно оптимизация пока непонятна, однако складывается ощущение, что автор недостаточно понимает смысл concurrency:
Т.е. определять имя шаблона необходимо в любом случае, даже если вы не обращаете на это внимание. В моем примере все шаблоны именуются одинаково "*". Можно дать любое другое именование.
Это неверный подход к анализу. Из выборки также необходимо исключить те функции, которые ничего не возвращают (процедуры, которые не задеклалированы в языке). А почти треть всех функций с error все же значимая часть кода, несмотря на пример с `fmt.Println()`, который больше исключение подтверждающий правило.
В целом направление интересное и возможно верное, хотя check станет самым частым словом в теле функции как в примере выше. Хоть и укорачивает, но слегка нечитабельно.
Возможно, как вариант вообще избавиться от слова check, введя дополнительный вид присваивания? Например, так:
Где `~` есть эквивалент `:= check`. Или вот так, получше вариант:
Однако я пришел к выводу, в конце концов, что, и за это необходимо сказать спасибо дальновидности Сатоши, любой анализ nonce бессмыслен в силу двойного sha; все было во много раз легче (хуже для биткоина), если бы заголовок хешировался однократно.
Ваш вероятностный подход прекрасен, но скорее всего только как попытка. Поскольку смешение битовых и арифметических действий в раундах дают то свойство функции, когда выявленное свойство работает на одних входных, но не работает на других.
Теперь можно убить?
И не прогадали.
Не подскажите по второму примеру, даны 3 дроби: 3/3 0/1 -5/5. Ответ тоже «Yes», но где здесь такое произведение двух дробей, дающее третью дробь? %)
Если дана всего одна дробь 7/42, то почему ответ «да»?
В качестве оптимизации дисковой нагрузки, можно упомянуть отключение логов:
Всем известный скрипт для gzip_static:
Мне тоже не ясна причина производительности с использованием go-рутин на 1 ядре. Ведь количество шагов, инструкций процессора будет одинаковым, без разницы в каком порядке будут выполнены go-подпрограммы и на какое количество псевдо-потоков разделится программный код.
В чем именно оптимизация пока непонятна, однако складывается ощущение, что автор недостаточно понимает смысл concurrency:
Тогда не будет блокировки основного цикла, ожидающего следующего Job. Так и работает 3 вариант.
Т.е. определять имя шаблона необходимо в любом случае, даже если вы не обращаете на это внимание. В моем примере все шаблоны именуются одинаково "*". Можно дать любое другое именование.