Как стать автором
Обновить
10
0
Цвет Диванов @zw0rk

Пользователь

Отправить сообщение

Интеграция Fail2ban с CSF для противодействия DDoS на nginx

Время на прочтение 12 мин
Количество просмотров 34K
Набор скриптов ConfigServer Security & Firewall (CSF) изначально обладает достаточно богатыми возможностями по организации защиты сервера хостинга Web с помощью фильтра пакетов iptables. В частности с его помощью можно противостоять затоплению атакуемого хоста пакетами TCP SYN, UDP и ICMP слабой и средней силы. Дополняет CSF встроенный Login Failure Daemon (lfd), который осуществляет мониторинг журналов на предмет наличия многочисленных неудачных попыток авторизации в различных сетевых сервисах с целью подбора пароля. Такие попытки блокируются путем внесения адреса IP злоумышленника в черный список CSF.
Читать дальше →
Всего голосов 28: ↑26 и ↓2 +24
Комментарии 14

Написание покерного бота

Время на прочтение 11 мин
Количество просмотров 46K
Внимание материал носит чисто ознакомительный характер, и автор не несет ответственности за закрытие аккаунтов покерными румами. По законам стран создание и использование ботов не запрещено, однако по правилам покерных румов они запрещены.

В данной статье полных исходных кодов не будет, только теоретически что и как можно использовать, и некоторые куски функций. Если ты интересуешься этим, тебе не составит собрать все в единую картину и написать свое. Так же не буду учить стратегиям игры, про термины или стратегии а так же правила можно в интернете найти много информации.
Читать дальше →
Всего голосов 53: ↑45 и ↓8 +37
Комментарии 42

(Python) Парочка полезных декораторов

Время на прочтение 3 мин
Количество просмотров 966
import should
  
@should.give((5,2),7)
@should.give(("aa","bbb"),"aabbb")
@should.give(([1],[2,3]), [1,2,3])
@should.give((1,1),1) # test
def add(a,b):
  return a+b
  
@should.throw((1,0), Exception)
@should.throw((5,0), ZeroDivisionError)
@should.throw((5,0), TypeError) # test
@should.throw((5,1), TypeError) # test
def div(a,b):
  return a/b



>pythonw -u "should.py"
[!] add(1, 1) should give 1, but got 2.
[!] div(5, 1) should raise TypeError, but raised nothing.
[!] div(5, 0) should raise TypeError, but raised ZeroDivisionError.
>Exit code: 0


Читать дальше →
Всего голосов 26: ↑21 и ↓5 +16
Комментарии 15

Загрузка файлов в AngularJS

Время на прочтение 3 мин
Количество просмотров 59K
Давно писал модуль для загрузки файлов и всё он был не идеальным. И тут подумал, если сейчас не опубликую, то никогда не опубликую, идеал-то не достижим!

При составлении АПИ руководствовался принципом — как можно проще. Поэтому сначала несколько мыслей о загрузке файлов:

Загрузка только методом POST. Как показала практика, сам по себе файл почти никогда не бывает отдельной сущностью и всегда привязан к каким-то другим данным в базе, поэтому создавать запись вместе с загрузкой файла — плохая идея. Правильно: сначала создать запись, потом отдельным запросом добавить туда файл. Такой подход снимает кучу вопросов, связанных с отменой загрузки, параллельным редактированием описания файла и проч. Так же, создавая запись предварительно, мы можем получить в ответ данные о количестве свободного места на сервере и использовать их для валидации на клиенте.

Загрузка каждого файла отдельным запросом. На любом хостинге существует ограничение на максимальный размер POST-запроса (напр., 10 МБ). Если мы грузим одновременно 10 файлов, значит их вес в сумме не должен превышать 10МБ. В 99% случаев проще пожертвовать производительностью и не иметь проблем с такими ограничениями.

Никаких отложенных загрузок. Файл должен загружаться сразу после добавления (не в 2000 году, чай, живем), поэтому никаких методов работы с очередью — выбрал файл, выбрал еще 5 штук, удалил один, нажал «отправить» — не будет. Зато будет отмена загрузки.

Не стоит разделять загрузку файлов по кнопке и перетаскиванием. В моем случае любая область, помеченная директивой позволяет перетаскивать на нее файлы, а если это инпут с типом file, то еще и в проводнике можно выбрать. Очень удобно знать, что на кнопку можно перетаскивать, когда потянул в браузер 10 файлов, а дизайнер забыл подсветить поле перетаскивания, и гадаешь перетащатся ли они или откроются в новом окне.
Читать дальше →
Всего голосов 44: ↑44 и ↓0 +44
Комментарии 29

Code Signing в Windows, просто и недорого

Время на прочтение 2 мин
Количество просмотров 44K
Хотел бы рассказать тут о такой важной особенности разработки под Windows как Code Signing. А ведь многие достаточно серьёзные разработчики до сих пор ей не пользуются, и очень зря. Помимо того что при запуске вашего неподписанного приложения появляется противная красная иконка с крестом и неприятным текстом:
«Этот файл не имеет цифровой подписи которая может подтвердить производителя. Вы должны запускать программы только от производителей которым доверяете.»
Это ещё и пропуск на корпоративный рынок.
Читать дальше →
Всего голосов 50: ↑42 и ↓8 +34
Комментарии 86

Визуализируем разработку БД PostgreSQL

Время на прочтение 3 мин
Количество просмотров 60K
Ни для кого не секрет, что проектирование структуры БД является одной из основных и порой очень трудозатратных задач при разработке любого ПО, работающего с данными. Все мы так или иначе проектируем БД, пытаясь представить себе схему взаимосвязей таблиц, а зачастую рисуем, визуализируем структуру БД, прежде чем перенести ее в СУБД. Для моделирования баз данных MySQL есть MySQL Workbench, поставляемый разработчиком, для MS SQL есть Database Diagrams; я до недавнего времени пользовался Dia, а кто-то, может быть, использует для этих целей MS Visio. Но для PostgreSQL я не встречал ни одного адекватного решения, которое позволяло бы максимально просто и точно перенести наброски структуры БД в код ее создания в самой СУБД.

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



Итак… (текст, много картинок)
Welcome to habracut!
Всего голосов 36: ↑35 и ↓1 +34
Комментарии 28

Table bloat? Не, не слышал…

Время на прочтение 3 мин
Количество просмотров 51K


Думаю многим известна особенность PostgreSQL, которая приводит к эффекту раздувания таблиц, или table bloat. Известно что она проявляет себя в случаях интенсивного обновления данных, как при частых UPDATE так и при INSERT/DELETE операциях. В результате такого раздувания снижается производительность. Рассмотрим почему это происходит и как с этим можно бороться.
что?
Всего голосов 59: ↑58 и ↓1 +57
Комментарии 25

Потоковое видео средствами ffserver & ffmpeg

Время на прочтение 2 мин
Количество просмотров 145K

Для организации трансляции нам потребуется:


  • Linux
  • FFmpeg (включает в себя ffserver)

Теория


FFmpeg — это набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровое аудио и видео в различных форматах. Он включает libavcodec, библиотеку кодирования и декодирования аудио и видео и libavformat, библиотеку мультиплексирования и демультиплексирования в медиаконтейнер. Название происходит от названия экспертной группы MPEG и «FF», означающего «fast forward».

© Wikipedia

ffserver идёт в комплекте с ffmpeg и выполняет роль медиа-сервера — получает видеопоток от ffmpeg, который может быть запущен на другой машине, и раздаёт его счастливым пользователям.
Каждый получаемый поток называется Feed’ом (далее будет просто фид). Таких потоков может быть несколько, так же как и отдаваемых (выходных).
FFmpeg у нас будет захватывать видео с веб-камеры или читать из файла.
Читать дальше →
Всего голосов 49: ↑41 и ↓8 +33
Комментарии 34

Китай организует Man-in-the-middle атаку против пользователей github

Время на прочтение 2 мин
Количество просмотров 50K

Китай активно блокирует доступ к всяким страшным оппозиционным сайтам (Тянаньмей, 六四事件, 1989, баним Хабр в Китае). Для этого во всю используется DPI — глубокий анализ пакетов. Который позволяет не просто закрывать доступ к IP/доменному имени, а вырезать «лишнее», либо закрывать конкретные страницы. Если какой-то сайт (типа google) начинает использовать SSL, то SSL по этому направлению просто закрывают, оставляя пользователей с http-only.

Однако… Есть в мире сайты, которые Китай не рискует банить. Один из них — github. Если бан gmail или facebook оставит кого-то без любимой почты или возможности увидеть статусы друзей, то бан github'а оставит сотни и тысячи айтишных компаний без доступа к репозиториям open-source приложений и библиотек. А их на гитхабе уже over 5000000. Это означает простой в работе, или даже прекращение деятельности компании (мы-то знаем, что это не проблема, но китайцы свой файрвол воспринимают вполне серьёзно, и русский сценарий «мы всё запретим, а там дальше кому надо сам разберётся» не рассматривают).

При этом github использует SSL всегда. http доступа просто нет. Таким образом, прямой DPI не возможен, а некоторые товарищи, пронюхав про это, начали активно использовать github для обмена информацией о том, как обходить файрвол, адресами прокси-серверов и т.д.

Не желая мириться с подобным, Китай перенаправил трафик github на свои сервера. Разумеется, по HTTPS. И, разумеется, не имея сертификата гитхаба. Таким образом, пользователи китая начали получать предупреждения об ошибке сертификата, а китайская кровавая гэбня получила возможность читать и модифицировать чужие коммиты. Если, конечно, коммитящий или читающий, согласится с тем, что HTTPS с фальшивым сертификатом это нормально. Впрочем, вариантов (легальных) у него нет, т.к. другого варианта доступа к гитхабу не предусмотрено.

Это всё вместе называется man-in-the-middle. И это суровая китайская реальность.
Читать дальше →
Всего голосов 102: ↑97 и ↓5 +92
Комментарии 118

Сниппеты для Twitter Bootstrap

Время на прочтение 1 мин
Количество просмотров 97K
Фреймворк Twitter Bootstrap уже давно стал одним из самых любимых средств ленивых сторонников быстрого прототипирования и разработки интерфейсов, а где популярность там много разных сторонних интересных штук.
На этот раз я случайно попал на пополняющуюся коллекцию сниппетов.
Думаю многим пригодится, сейчас там набор небольшой (23 штуки), но уже достаточно полезный чтобы поделиться.
Кликабельные картинки:

Интерфейс аля gmail



Читать дальше →
Всего голосов 125: ↑117 и ↓8 +109
Комментарии 23

Google Analytics для сбора ошибок JavaScript

Время на прочтение 2 мин
Количество просмотров 19K
image
Не так давно на Хабре была статья про навороченный стартап, заточенный на сбор ошибок JavaScript. Далеко не всегда нужно столько возможностей, но оказалось, что многие просто не знают про старый бородатый способ с Google Analytics. Про него я и попытаюсь кратенько рассказать.
Читать дальше →
Всего голосов 124: ↑121 и ↓3 +118
Комментарии 27

Интерактивная визуализация данных Envision.js

Время на прочтение 1 мин
Количество просмотров 5.2K
Envision.js библиотека для создания быстрых динамических и интерактивных визуализаций данных на HTML5.


Возможности:

1) Визуализация в реальном времени.
2) Временная шкала
3) Визуализация валют ( как на яндексе прям )
4) Поддержка Ajax в интерактиве.
5) Можно побаловаться фракталами.

Читать дальше →
Всего голосов 88: ↑84 и ↓4 +80
Комментарии 17

Прозрачное кэширование в nginx для всех и каждого

Время на прочтение 2 мин
Количество просмотров 114K
Представим, что у нас есть сайт, на который регулярно дают ссылки с хабра.
Нам нужно подготовить его к резким всплескам посещаемости. Как это сделать?

С версии 0.8.46 в nginx появились опции, позволяющие легко и просто настроить прозрачное кэширование для анонимных пользователей.

Для работы этой схемы от сайта требуется очень мало: достаточно лишь не начинать сессию, то есть не отправлять сессионную куку, без явной на то необходимости. Редкий сайт нельзя довести до такого состояния, а значит большинство сайтов можно защитить от резких всплесков посещаемости с помощью nginx с минимальными затратами сил и времени.

Читать дальше →
Всего голосов 100: ↑97 и ↓3 +94
Комментарии 65

База GeoIP – страны и города, декабрь 2011

Время на прочтение 2 мин
Количество просмотров 9.7K
Вышла в свет обновленная версия русскоязычной базы данных стран и городов. Основное изменение — удалено большое количество дублей городов.
Читать дальше →
Всего голосов 80: ↑75 и ↓5 +70
Комментарии 70

Тонкости при работе с иностранным заказчиком

Время на прочтение 5 мин
Количество просмотров 96K
В соседней теме попросили рассказать о нюансах работы с зарубежными клиентами для ИП/ООО. Для физических лиц работа с нерезидентами ничем не отличается работы с резидентами.
Это скорее даже не статья, а заметка/памятка, но возможно кому-нибудь будет хоть немного полезна.

Регистрация счета


Предположим что вы закончили регистрацию ИП/ООО и открыли рублёвый расчетный счет.
Для того чтобы работать с валютой нужно открыть еще один расчетный счет — валютный. Это просто.
При открытии валютного счета вам создадут дополнительно технический транзитный счет. Его реквизиты и нужно сообщать заказчику.

Здесь мы встречаем потенциальный косяк номер раз: как и в случае с рублевым счетом нужно уведомить налоговую в недельный срок (штраф — 5000 рублей [1]). Затем не забыть уведомить и своё отделение ПФР в тот же срок, иначе опять же штраф, но уже меньше — 2000. Если вы зарегистрированы в ФСС, то нужно не забыть так же и их, всё аналогично случаю с ПФР. [2]

ООО нужно уведомить ПФР и ФСС только если есть работники. ИП — обязательно ПФР, но если есть или были работники, то и ФСС.

Некоторые госслужбы «не шарят» и пытаются оштрафовать если не уведомили о транзитном счете. Это противозаконно и легко решает даже в досудебном порядке, не говоря уже о суде. Заявлять нужно только об обычном счете, о транзитном — не нужно.

В принципе здесь всё кристально ясно, единственно вызывает легкое недоумение зачем носить эти бумажки если банк тоже обязан выслать информацию об открытие счетов.
Читать дальше →
Всего голосов 82: ↑81 и ↓1 +80
Комментарии 172

django-voting сортировка по рейтингу

Время на прочтение 2 мин
Количество просмотров 2.1K
Думаю, многие знакомы с этим расширением, но всё же:
django-voting позволяет ввести оценку любой сущности по digg-принципу (+1/-1) максимум за 30 минут (с учётом включения асинхронных запросов JS).
Сайт проекта: django-voting.googlecode.com
Но есть одна плохая особенность: отсутствие возможности сортировать сущности по рейтингу стандартными средствами ORM. Далее опишу как это реализовал я.
Читать дальше →
Всего голосов 21: ↑19 и ↓2 +17
Комментарии 15

Subtle Patterns: фоновые текстуры для вашего сайта

Время на прочтение 1 мин
Количество просмотров 72K
Если вы запускаете новый сайт и заканчиваете его оформление, то есть смысл посмотреть коллекцию Subtle Patterns: отлично оформленную коллекцию фоновых текстур (паттернов) под лицензией Creative Commons Attribution 3.0 Unported. Их можно использовать без ограничений.



Сайт привлекает удобным предварительным просмотром: каждую текстуру можно мгновенно применить на всей странице в качестве фона. Сейчас там 93 работы, коллекция еженедельно пополняется отличными новинками.

Все текстуры на сайте Subtle Patterns являются повторяющимися, то есть склеиваются в бесшовную заливку.
Читать дальше →
Всего голосов 262: ↑247 и ↓15 +232
Комментарии 29

Введение в SproutCore, часть первая

Время на прочтение 11 мин
Количество просмотров 2.2K
В последнее время появилось много статей о JavaScript MVC фреймворках. Видимо есть потребность в подобных инструментах. Мое внимание привлек продукт под названием SproutCore. Обнаружив на скудное наличие информации на русском языке я решил перевести для себя ряд руководств с официального сайта фреймворка. Поделюсь с сообществом первым из них.

После прочтения этого руководства, вы сможете:
  • Использовать шаблоны SproutCore, для описания внешнего вида приложения;
  • Обрабатывать события внутри представления;
  • Использовать привязки(bindings) для обновления представления, после изменения состояния модели.


Вы узнаете все это во время создания приложения Todo-лист.

Исходный код этого приложения доступен на Github. Также есть скринкаст.
Читать дальше →
Всего голосов 28: ↑25 и ↓3 +22
Комментарии 19

Монады с точки зрения теории категорий

Время на прочтение 9 мин
Количество просмотров 34K

Введение

Кажется, монады в программировании стали загадкой века. И для этого есть две причины:
  • недостаточное знание теории категорий;
  • многие авторы стараюстся не упоминать категории вообще.
Это как говорить об электричестве не используя мат. анализ. Достаточно для замены предохранителя, не хватит, чтобы спроектировать усилитель.

Мы начнём с простого введения в категории и функторы, затем дадим определение монады, приведём простые примеры монад в категориях и в конце приведём монадическую терминологию используемую в языках программирования.

Я уверен, что монады с точки зрения категорий почти элементарны.

Содержание

  1. Категория
  2. Функтор
  3. Естественное преобразование
  4. Монада
  5. Монады исключения и состояния
  6. Монады в программировании
  7. Ссылки
Читать дальше →
Всего голосов 126: ↑105 и ↓21 +84
Комментарии 150

Python-неизвестный

Время на прочтение 4 мин
Количество просмотров 27K
На Хабре уже есть несколько статей\переводов, в которых рассказывается о неизвестных фичах\тонкостях\возможностях Пайтона. Я буду пытаться не повторять их, а дополнять, но если уж так случилось, что вы это уже где-то видели — не огорчайтесь. Я уверен, что найдется что-то интересное и для вас.
Читать дальше →
Всего голосов 144: ↑140 и ↓4 +136
Комментарии 51

Информация

В рейтинге
Не участвует
Откуда
Бобо Диуласо, Буркина Фасо, Буркина Фасо
Дата рождения
Зарегистрирован
Активность