Обновить
7
Dmitriy@dblokhin

Developer

3
Подписчики
Отправить сообщение
$ grep -r '^func'. | grep error | wc -l
12928
$ grep -r '^func'. | grep -v error | wc -l
38878

Это неверный подход к анализу. Из выборки также необходимо исключить те функции, которые ничего не возвращают (процедуры, которые не задеклалированы в языке). А почти треть всех функций с 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; все было во много раз легче (хуже для биткоина), если бы заголовок хешировался однократно.
Ваш вероятностный подход прекрасен, но скорее всего только как попытка. Поскольку смешение битовых и арифметических действий в раундах дают то свойство функции, когда выявленное свойство работает на одних входных, но не работает на других.
Разовая для радиотехнологий сотовой связи — 102200 руб.
Ежегодная для радиотехнологий сотовой связи — 385440 руб.

Разовая для иных технологий — 438 руб.
Ежегодная для иных технологий — 2044 руб.

Теперь можно убить?
Автор выше реализовал синглтон. Переменная config в целом не глобальна, т.к. начинается не с Заглавной буквы, и видима только внутри какого-то своего пакета.
Если это случится, 1 BTC будет стоит прилично больше 10 USD.
Я готов рискнуть некоторой сумкой денег и своего времени, поставив на это.

И не прогадали.
Именно так. В вики другая формулировка, т.е. по сути другая задача.
Спасибо за комментарий, с этим можно согласиться.
Не подскажите по второму примеру, даны 3 дроби: 3/3 0/1 -5/5. Ответ тоже «Yes», но где здесь такое произведение двух дробей, дающее третью дробь? %)
Не пониманию задачу F (Дроби) на уровне условия, может кто-нибудь подскажет, почему на первый тестовый пример правильный ответ «YES»? Из условия:
  1. такое, что ai · aj =ak.
  2. Выведите «Yes», если для каждой пары различных i и j найдётся требуемое k

Если дана всего одна дробь 7/42, то почему ответ «да»?
Действительно, я был не прав, третий вариант качественно иной.
Конечно, добавляйте.
Мое дополнение к статье, касаемо безопасности:
# Запрет на открытие в 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;
}


В качестве оптимизации дисковой нагрузки, можно упомянуть отключение логов:
# Контексте сервера
access_log  off;

# В контексте статики
location ~* \.(pdf|gif|jpg|css|txt|js|png|ico|svg|ttf|woff|eot|html|htm|json|woff2)$ {
                root   /www/path/static;
                log_not_found off;
        }

Всем известный скрипт для gzip_static:
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:
для того чтобы обрабатывать их одновременно.
Зря вы так. Это ведь настоящие достижения человечества.
Скажите, что такое «15-9»?
Третий вариант, точно такой же как и второй, только с небольшим допущением:
func StartProcessor() {
    for {
        select {
        case job := <-Queue:
            // job.payload.UploadToS3()  // <-- STILL NOT GOOD
            go job.payload.UploadToS3()
        }
    }
}

Тогда не будет блокировки основного цикла, ожидающего следующего Job. Так и работает 3 вариант.
Пару примеров бы конкретных оптимизаций, паттернов и тех рудиментов, которые решают какие-то проблемы с памятью.
Это именование шаблона, требование системы шаблонов «text/template» (и соответственно «html/template»), т.к. шаблоны могут быть множественно представлены в одном файле: golang.org/pkg/text/template/#hdr-Nested_template_definitions

Т.е. определять имя шаблона необходимо в любом случае, даже если вы не обращаете на это внимание. В моем примере все шаблоны именуются одинаково "*". Можно дать любое другое именование.
Задавайте свои вопросы и/или оставляйте свои рекомендации.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность