Задать вопрос
  • ДДос атака на nginx пакетами 1 байт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    500 строк в секунду - это не мощно и, вероятно, даже не DDoS. Если адрес один, то просто закройте ему доступ брандмауэром, а если адреса разные, то настройте лимит запросов в Nginx.

    nginx.conf
    http {
        ...
        limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=30r/s;
        ...
    }

    some_site.conf
    server {
        ...
        location / {
            ...
            limit_req zone=reqlimit burst=10 nodelay;
        }
    }

    После этого запросы с одного ip-адреса начиная с 31-го в секунду будут отбрасываться.

    Как вишенку на торт, можно добавить ещё фильтр для fail2ban:

    nginx-req-limit.conf
    [Definition]
    
    failregex = limiting requests, excess: .* by zone .*, client: <HOST>
    ignoreregex =

    и правило в jail.local
    [nginx-req-limit]
    enabled = true
    port = http,https
    filter = nginx-req-limit
    logpath = /var/www/*/*/logs/error.log # Здесь укажите свой путь к логам виртуального хоста
    findtime = 600
    maxretry = 10
    bantime = 7200

    После этого адреса DoS'еров будут автоматически блокироваться брандмауэром на два часа. Что разгрузит Nginx от обработки паразитного трафика.
    Ответ написан
    11 комментариев
  • Как мониторить определенные сервисы на нескольких линукс машинах?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    nagios, zabbix и еще пачка подобного
    Ответ написан
    Комментировать
  • Как выбрать из текста 3 слова одинаковой или похожей (максимально приближенной) длины?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Собрать из текста словарь "длина": [слово,слово]
    Выбирать слова нужной длины, а при отсутствии смотреть соседние по значению ключи.

    words = txt.replace(/[\.,\?\!\:;\–\(\)]/g, '').toLowerCase().split(/\s+/);
    
    // make dictionary
    var db = [];
    for( var i = 0; i < words.length; i++) {
      word = words[i];
      len = word.length;
      if(db.length <= len || typeof db[len] == 'undefined') db[len] = [];
      if(!~db[len].indexOf(word)) db[len].push(word);
    }
    
    function getWords(db, length, n) {
      n = n || 3;
      var result = [], offset = 0, m;
      length = Math.max(0, Math.min(length, db.length));
      while( result.length < n) {
    
        m = n - result.length;
        if( db[length + offset]) {
          result = result.concat( getUpTo(m, db[length + offset]))
        }
    
        m = n - result.length;
        if( offset &&  m  &&  db[length - offset]) {
          result = result.concat( getUpTo(m, db[length - offset]))
        }
        
        m = n - result.length;
        if( m === 0) break;
        offset++;
        if( offset + length > db.length && offset > length) break;
      }
      
      return result;
    }
    
    function getUpTo(n, arr) {
      return arr.slice(0, Math.min(n, arr.length));
    }


    Fiddle
    Ответ написан
    1 комментарий
  • Mysql сортировка по кругу?

    @PapaStifflera
    Родился, вырос...
    В чем проблема то?
    SELECT * FROM t ORDER BY id, pos
    sqlfiddle.com/#!9/dc727b/1
    Ответ написан
    1 комментарий
  • Можно ли назначать переменные с помощью итераций FOR?

    adugin
    @adugin Куратор тега Python
    А какую задачу требуется решить? Вероятно, можно обойтись этим:
    from collections import namedtuple
    
    Record = namedtuple('Record', 'a, b, c, d, e, f, g, h')
    r = Record(*[1]*8)
    
    print(r.a, r.b, r.h)

    Или так:
    class O():
        pass
    
    o = O()
    
    for attr in 'abcdefgh':
        setattr(o, attr, 1)
        
    print(o.a, o.b, o.h)
    Ответ написан
    Комментировать
  • Как подчинить сортировку с буквой Ё и с itemgetter?

    adugin
    @adugin Куратор тега Python
    Формальный говнокод для решения проблемы буквы Ё (концепт):
    key = lambda c: ord('Е') + 0.5 if c == 'Ё' else ord(c)

    Правильный путь:
    import locale
    from functools import cmp_to_key
    from collections import OrderedDict
    
    locale.setlocale(locale.LC_ALL, 'Russian_Russia.1251')
    
    a = [{'src': 'Яблоко', 'dst': 2343}, {'src': 'Ананас', 'dst': 323}, {'src': 'Ёжик', 'dst': 3223}]
    
    # Чтобы не вызывать связку cmp_to_key(locale.strcoll) в sorted() многократно
    def keyfunc(item, func=cmp_to_key(locale.strcoll)):
        return func(item[0])
    
    d = OrderedDict(sorted(((e['src'], e['dst']) for e in a), key=keyfunc))

    Если всё же требуется именно список словарей:
    # Чтобы не вызывать связку cmp_to_key(locale.strcoll) в sorted() многократно
    def keyfunc(item, func=cmp_to_key(locale.strcoll)):
        return func(item['src'])
    
    sorted(a, key=keyfunc)

    Но самое адекватное решение будет таким (для работы: pip install sortedcontainers):
    from sortedcontainers import SortedDict
    d = SortedDict(cmp_to_key(locale.strcoll), {e['src']:e['dst'] for e in a})

    Примечания:
    1. Если можете использовать последнюю версию Python, то начиная с версии 3.6 порядок элементов в словаре не меняется, то есть его можно создать сразу сортированным и работать без опасений.
    2. Модуль sortedcontainers по быстродействию и удобству оставляет позади все существующие альтернативные библиотеки, включая стандартную collections. Очень рекомендую.
    Ответ написан
  • Как создать gui приложение на go?

    @zserge
    Для несложного UI, или для сложного если нравится HTML5/CSS можно использовать https://github.com/zserge/webview

    Это тонкая обертка над gtk-webkit, Cocoa-Webkit и MSHTML (IE10-11). Позволяет создать окно с веб-вью на весь экран и использовать JS-биндинги для связи UI с логикой приложения. Можно выполнять произвольный JS-код в UI из Go, и можно вызывать Go-функцию из JS.

    В отличие от Electron, размер бинарников будет около 5-10МБ, и потребляемая приложение память тоже где-то в этих пределах.
    Ответ написан
    3 комментария
  • Как во Freepbx запретить экстеншену 100 звонить экстеншену 200?

    @Drill
    в extensions_custom.conf в контекст [from-internal-custom] добавить одну строку
    exten => 200/100,1,Hangup()
    Ответ написан
    Комментировать
  • Как в intersection задать упорядочение?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Да, вам нужна структура данных, подобная множеству, но с сохранением порядка элементов.
    Возьмите OrderedSet отсюда.
    Код с использованием OrderedSet:
    from django.utils.datastructures import OrderedSet
    a = ['Мышь', 'Дом', 'Home', 'Лом', 'a', 'z']
    b = ['Мышь', 'Лом', 'z', 'jo']
    OrderedSet(a) & OrderedSet(b)

    Получится:
    OrderedSet(['Мышь', 'Лом', 'z'])
    Ответ написан
    1 комментарий
  • Как можно наказать сайты конкурента за склейку?

    Exploding
    @Exploding
    wtf?
    Почему он не добросовестный? Ну сделал себе человек несколько сайтов и что с того? Если ПС не загонят один из них под фильтр - значит они не копии друг друга и на то нет причин.
    А Ваши критерии вообще не являются основанием для каких либо санкций.
    Или я что-то не так понял?
    Ответ написан
    Комментировать
  • Как разобраться в машинном обучении на питоне?

    LazyTalent
    @LazyTalent
    Data Engineer, Freelancer
    Если в кратце то:
    1. Дб корпус текстов с лейблами (например, позитивный твит, негативный твит)
    2. Удаляешь знаки препинаия
    3. Удаляешь стоп слова (предлоги и пр. не имеющее смысловой нагрузки)
    4. Делаешь стемминг
    5. Из каждого твита делаешь набор н-грамм
    6. Из н-грамм делаешь TF-IDF словарь
    7. Сплитишь полученный словарь на данные для обучения и данные для тестов
    8. Засовываешь все это в понравившийся алгоритм для МЛ, например, так:
    clf = RandomForestClassifier(n_jobs=-1)
    clf.fit(X_train, y_train)

    9. Сохраняешь полученную модель в пикл и потом уже используешь ее для текстов, которые необходимо классифицировать.
    predict = clf.predict(tfidf_predict.toarray())
    Ответ написан
    3 комментария
  • Возможно ли узнать местоположение телефона без интернета?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Определить местоположение можно и без интернета - работайте с GPS.
    Передать определённое местоположение куда-либо без интернета - ну разве что SMS.
    Ответ написан
    Комментировать
  • Что делать когда коллеги уровнем ниже?

    @amambaru
    Кто сказал что они ниже уровнем?
    Эффект Даннинга — Крюгера
    Программеру всегда трудно вникнуть в чужой код - это не зависит от квалификации того, кто кодировал.
    Возможно что даже и они более квалифицированы - просто давным-давно забили на перфекционизм, а из вас он еще прет из за юнешеского максимализма.
    А может и вы правы.

    Тут дело не в квалификации, а в мотивации и организации процесса.
    Скажем, мне доводилось работать в команде, где в git пропускали всего по 200 строчек изменений за раз. И эти строчки обязательно должны были пройти через стандартизованное форматирование и линтеры (статические анализаторы) - иначе их git выплевывал. Это вынуждало программистов писать более менее приемлимо - коллег код меньше раздражал.
    Ответ написан
    19 комментариев
  • Почему mysql потребляет более 100% CPU?

    @Fixid
    Mariadb 10 или упрощайте запросы + ведите slow log
    Ответ написан
    3 комментария
  • Неотднократный взлом аккаунт instagram, как такое возможно?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Возможны следующие варианты:
    • инфицирован компьютер клиентки (наиболее вероятно)
    • имеется доступ к каналу пересылки конфиденциальных данных (например к почте)
    • плохой/простой/словарный пароль (вероятно)
    • инфицирован роутер/модем/камера (вероятно)
    • используется левый сервис для накрутки аккаунтов (вероятно)
    • клиент передает данные от аккуанта третьему лицу, от которого происходит утечка
    • заражено устройство у провайдера (маловероятно, и такое бывает)
    • инфицировано устройство (например троян на телефоне)
    • дыра у Инстаграма (маловероятно)
    Ответ написан
    1 комментарий
  • Какие алгоритмы нужно знать веб разработчику?

    2ord
    @2ord
    Не помню когда какой алгоритм использовал последний раз в веб-разработке.
    Из алгоритмов порой может использоваться разве что линейный и бинарный поиск в массивах. В любом случае, как правило, такие алгоритмы реализованы в стандартных библиотеках и поэтому остаётся лишь вызвать нужную функцию.
    Порой нужно посчитать что-то несложное, например статистику с выборкой по разным таблицам в БД или что-то по простенькой формуле. Изредка-изредка попадаются немного более сложные задачи. Но задач типа динамического программирования или по искусственному интеллекту не жди - такие задачи обычно решаются программистами с другой квалификацией, независимо от веб-разработки.

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

    Stalker_RED
    @Stalker_RED
    Покупаем 100500 симкарт, вставляем в коробочки типа такой
    GVztWDO.png
    Ответ написан
    Комментировать
  • Как проверить список на пустоту?

    @immaculate
    Программист-путешественник
    Вместо исключений намного лучше выглядит .get или key in dictionary:
    quality = job['data']['fields'].get('quality', '2222')
    my_file = open(os.path.join(pathToTmpDir, 'quality.json'), 'w')
    my_file.write(quality)
    my_file.close()
    Ответ написан
    Комментировать
  • Уменьшится ли нагрузка, если перенести таблицу на другой ssd?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    лучше Redis поставьте.
    Ответ написан
    Комментировать
  • Как правильно именовать таблицы, столбцы в базе данных?

    JohnnyGat
    @JohnnyGat
    Стараюсь писать код, понятный человеку.
    SQL Style Guide - www.sqlstyle.guide
    Перевод на русский - www.sqlstyle.guide/ru
    Ответ написан
    6 комментариев