danforth

danforth
Рейтинг
153
Регистрация
18.12.2015
HTTP/2 не работает без SSL, нужно ходить на https версию сайта. HTTP/2 в курле с версии 7.33.0

Не понимаю айтишников, которые приезжают куда-то на пляж и лежат там весь отпуск или бухают. Ладно если б ты был физически измотанный грузчик, но ты ж блин выгоревший айтишник который сидит 80% времени жопой в стуле. 

Я обычно езжу куда-то в горы, беру с собой вел и спускаю какие-то ендуро трассы. Иногда хожу в походы. Это ваще очень сильно перезагружает. Море как-то совсем не то, хотя 20 лет своей жизни жил у моря, и даже ходил на судне через океаны. 

А так, если бы было можно ездить без ограничений, которые сейчас из-за ковида, я б наверное слетал куда-то в Бразилию. Был там два раза, мега круто. Либо в Непал.

Количество возвращаемых результатов никак не зависит от конфигурации. У вас либо будет ошибка, либо вернет одинаковый результат. Максимум возможен не детерминированный результат, т.е. не отсортированный. Ищите ошибку в логике.
timo-71 #:

Рутина, иными словами. Но, такое везде есть. Причем, существенная, наверное часть. "+/- " есть у всех языков, тут только вздохнуть: "такова селяви".

Не, рутина есть везде, но в разных языках есть разные инструменты для её решения. В Go из-за отсутствия дженериков нет нормального способа для работы с коллекциями данных (filter, map). 

Например есть условные логи, и нужно получить топ 2 самых популярных айпи. 

Тут сама структура и данные. 

struct LogRecord {
    ip: String,
    user: String,
}

let log = vec![
    LogRecord::new("1.2.3.4", "John"),
    LogRecord::new("0xc00lhack3r", "Mike"), // bad ip, will be filtered out
    LogRecord::new("1.2.3.4", "John"),
    LogRecord::new("4.5.6.7", "Hacker"),
    LogRecord::new("1.2.3.4", "John"),
    LogRecord::new("8.9.10.11", "Alice"),
];

А тут сама логика.

// тут начинается магия
let hits: Vec<_> = log
    .iter() // получаем итератор
    .sorted_unstable_by_key(|&v| &v.ip) // сортируем для дедупликации
    .filter_map(|v| IpAddr::from_str(&v.ip).ok()) // выковыриваем из LogRecord только IP, и только те что парсятся
    .dedup_with_count() // дедуплицируем данные со счетчиком
    .sorted_unstable_by_key(|v| -(v.0 as i32)) // сортируем, те что чаще - выше
    .take(2) // берем два верхних
    .collect(); // собираем в массив
// на выходе массив из двух айпишников и количество хитов

for (count, ip) in hits {
    println!("{} => {}", ip, count)
}

На го такой код даже лень писать, ибо я уже проходил это, знаю примерно сколько символов на это уйдет. Но можешь попробовать, задачки ради)

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

timo-71 #:

У меня хелловорлд проще

ListenAndServe всегда возвращает non-nil ошибку, поэтому лучше заменить на log.Print. log.Fatal - это по сути вызов os.Exit после записи в лог, поэтому если в функции есть какие-то defer функции (например, закрытие коннектов к базе, и т.д.), то они не выполнятся.

timo-71 #:

Почему?

Потому что язык по сути слишком прост, и когда доходишь до решения какой-то задачи, то большая часть кода начинает становиться слишком императивной. У меня наверное уже с 20 проектов на нем написано, суммарно строк кода наверное перевалило за 400k (хотя я не считал, может привираю), один из проектов держит 2млн/рпс. Язык без дженериков (обещают завести), без тайп-сум, с не очень удачной обработкой ошибок (но на порядок лучше чем эксепшены). Конечно, пока пишешь хело ворлды или байтики по сети гонять, то это все быстро и просто, а когда проект разрастается, то начинаешь тянуть кучу бойлерплейта из проекта в проект. 

timo-71 #:
Однозначно полезная.

Уж лучше тогда hey

suffix #:

Порт менять необязательно - оставляете только авторизацию по ключу и настраиваете (в свежей версии !) fail2ban так называемый "прогрессивный" бан (с каждой попытки с одного IP время бана растёт в геометрической прогрессии).

У меня так сейчас:

Какой смысл от fail2ban для защиты ssh в случае аутентификации по ключу? Забивать таблицу нетфильтра айпи адресами бот ферм? Пусть долбятся себе, все равно безуспешно. 

Я обычно меняю порт и если слишком параною, то knockd со списком портов для простукивания, прежде чем откроется доступ для конкретного айпи на порт ссш. 

Dmitriy_2014 :
А вот есть ли разница в скорости работы PHP?

Как правило, потребление памяти и скорость работы - это как две чаши весов. Если что-то жрет меньше, то скорее всего оно будет медлительнее. В случае с gentoo, там почти все собирается ручками, из-за этого система получается более легкая. Плюс, можно подергать ручки при компиляции, оптимизировав под конкретное железо (нужно знать какие дергать, с пониманием, собрать с -O9 не получится). Но сомневаюсь что на 25%, скорее 3-5%. 

Тех же результатов можно достичь, например, собрав PHP с jemalloc или tcmalloc аллокатором. 

ebpf, auditctl, watch netstat -pt

timo-71 #:

А я уже свой хелло ворлд посмотрел🤣. Работает.

Тоже хочу освоить

Там осваивается за месяц. Первый год пишешь - кайфуешь, а потом начинаешь плакать. 

timo-71 #:
Ну и так, на всякий.  Примерно год назад, я спрыгнул с РНР. Как раз на питон. После 20 лет, за которые накопились решения, на огромное количество задач и все грабли на которые можно наступить, основательно истоптаны😂  Обстоятельно взвесив все за и против при этом.

Я питончик уже давно хочу выучить, но времени никак нет, да и в свой стек я его никак не воткну. Выучить хочу чисто чтобы писать всяких ботов в телеге и скрипты-однодневки под свои нужды. 

Всего: 1540