Pull to refresh
0
0
Дмитрий @c4simba

Программист

Send message

Жизнь разработчика (в картинках)

Reading time1 min
Views66K
Взято отсюда специально для хабра. Возможно, в некоторых из ситуаций вы узнаете себя.

Когда я показываю босу, что окончательно пофиксил баг



Когда проджект-менеджер входит в офис



Читать дальше →

18 неожиданностей при чтении исходного кода jQuery

Reading time4 min
Views56K
Перевод статьи «18 Surprises From Reading jQuery's Source Code», David Aragon.

Я люблю jQuery, и хотя я считаю себя продвинутым JavaScript разработчиком, я никогда, до сих пор, не читал исходники jQuery с начала и до конца. Вот несколько вещей, которые я при этом узнал:
Читать дальше →

Скорости разработки и исполнения, не достижимые на С

Reading time20 min
Views59K
В продолжении статьи о кроссплатформенной и кросс-аппаратной оптимизации, на примере задачи поиска полным проходом по таблице из 5 полей и 10 000 000 строк, и неизбежности этой задачи даже при индексном поиске, я покажу как ускорить такой поиск в 3.5-5.3 раза с использованием C++ независимо от аппаратной платформы.
В предыдущей статье нам удалось ускорить поиск в 1.3 раза: GitHub.com
Мы не будем банально описывать конструкции языка, а покажем преимущества C++ при решении одного из этапов реальной задачи.
Мы по-прежнему пишем кроссплатформенно под MSVC11(MSVS2012) и GCC 4.7.2, и используем в них C и частично реализованный стандарт C++11.
Для упрощения понимания мы все ещё пишем без индексного поиска, но это решение в дальнейшем будет использоваться при индексном поиске.
Читать дальше →

Оперативная реакция на DDoS-атаки

Reading time4 min
Views51K
Один из ресурсов, за которым я присматриваю, вдруг стал неожиданно популярным как у хороших пользователей, так и у плохих. Мощное, в общем-то, железо перестало справляться с нагрузкой. Софт на сервере самый обычный — Linux,Nginx,PHP-FPM(+APC),MySQL, версии — самые последние. На сайтах крутится Drupal и phpBB. Оптимизация на уровне софта (memcached, индексы в базе, где их не хватало) чуть помогла, но кардинально проблему не решила. А проблема — большое количество запросов, к статике, динамике и особенно базе. Поставил следующие лимиты в Nginx:

на соединения
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 100;

и скорость запросов на динамику (fastcgi_pass на php-fpm)
limit_req_zone $binary_remote_addr zone=dynamic:10m rate=2r/s;
limit_req zone=dynamic burst=10 nodelay;

Сильно полегчало, по логам видно, что в первую зону никто не попадает, зато вторая отрабатывает по полной.

Но плохиши продолжали долбить, и захотелось их отбрасывать раньше — на уровне фаервола, и надолго.

Сначала сам парсил логи, и особо настырных добавлял через iptables в баню. Потом парсил уже по крону каждые 5 минут. Пробовал fail2ban. Когда понял, что плохишей стало очень много, перенёс их в ipset ip hash.

Почти всё хорошо стало, но есть неприятные моменты:
— парсинг/сортировка логов тоже приличное (процессорное) время отнимает
— сервер тупит, если началась новая волна между соседними разборками (логов)

Нужно было придумать как быстро добавлять нарушителей в черный список. Сначала была идея написать/дописать модуль к Nginx + демон, который будет ipset-ы обновлять. Можно и без демона, но тогда придётся запускать Nginx от рута, что не есть красиво. Написать это реально, но понял, что нет столько времени. Ничего похожего не нашёл (может плохо искал?), и придумал вот такой алгоритм.

При привышении лимита, Nginx выбрасывает 503-юю ошибку Service Temporarily Unavailable. Вот я решил на неё и прицепиться!

Для каждого location создаём свою страничку с ошибкой
error_page 503 =429 @blacklist;

И соответствующий именованный location
location @blacklist {
    fastcgi_pass    localhost:1234;
    fastcgi_param   SCRIPT_FILENAME    /data/web/cgi/blacklist.sh;
    include         fastcgi_params;
}

Дальше интересней.
Нам нужна поддержка CGI-скриптов. Ставим, настраиваем, запускаем spawn-fcgi и fcgiwrap. У меня уже было готовое для collectd.

Сам CGI-скрипт
Читать дальше →

Домашний/проводной интернет с резервным каналом по 3g

Reading time7 min
Views52K
Решил написать, так как в основном есть статьи по резервированию основного 3g канала на другой, а 3g как резервный при проводном интернете — почему то сложно найти.

Была поставлена задача организовать людям резервирование доступа в интернет с автоматическим переключением канала.

Покопав интернет, были найдены устройства с поддержкой 3g «свистков». Выбор был из Zyxel Keenetic, drytek и TP-Link (но всю жизнь работали с Asus и D-Link по объективным причинам и собственным статистическим данным). По опыту решения «всяких» задач, выбор пал на TP-Link. Выбрать было просто, Open WRT дружит со всеми TP-Link'ами (запасной вариант). Так же требования по 3g связи. Предоставили мне Huawei E367 от мегафона.

Коробка попала ко мне в руки. (описывать ее не буду, описаний много, сразу к делу). Приятные плюшки от TP-Link'а радовали всегда. В «поле» он у нас ни когда не тестился. Работа всегда велась с более стабильными роутерами. Но Open WRT в данном вопросе — перевесил все сомнения. И как оказалось — не зря, но об этом позже.

Базовая прошивка, базовая настройка, Wan preffered, запуск, тест. Эмуляция «сетевой кабель не подключен» работает на ура. В обе стороны как надо переключается канал. Но мы то знаем, что «падения» бывают не только на «крыше», но и дальше. Кто то что то копал, задел кабель, порвал. Свитч жив, линк по кабелю жив, роутер «думат» что всё ок. Нас это не устраивает.

Задача:
1) TP-LINK TL-MR3420 V2
2) 3g интернет Мегафон Huawei E367
3) Провайдер с настройками по Static IP и проводом с RJ-45
Читать дальше →

Миникомпьютер из роутера с OpenWRT: пишем USB class-driver под Linux

Reading time20 min
Views79K

Добрый день, уважаемые хабровчане. В прошлой статье мы с вами разработали простую USB-видеокарту на базе STM32F103 и китайского дисплейного модуля на контроллере ILI9325.
Проверяли мы его из юзерспейса, при помощи LibUSB. Ну что ж, пришло время нам написать свой собственный драйвер, который позволит делать все то же самое, но из-под Linux и без дополнительных библиотек. Этот драйвер мы внесем в дерево исходников OpenWRT и он поселится там наравне со всеми остальными.
Начнем.
Читать дальше →

Руководство по оформлению HTML/CSS кода от Google

Reading time12 min
Views359K

От переводчика


С удовольствием ознакомился с этими рекомендациями и теперь предлагаю вам перевод.

Введение


Это руководство описывает правила для оформления и форматирования HTML и CSS кода. Его цель — повысить качество кода и облегчить совместную работу и поддержку инфраструктуры.

Это относится к рабочим версиям файлов использующих HTML, CSS и GSS

Разрешается использовать любые инструменты для минификации компиляции или обфускации кода, при условии, что общее качество кода будет сохранено.
Читать дальше →

Information

Rating
Does not participate
Location
Орел, Орловская обл., Россия
Date of birth
Registered
Activity