12 сентября 2019 г.

Integrated Dynamics | Export below damage

For anyone finding this in the future, here's a step-by-step instruction on how to do it:
  • Have Integrated Dynamics 0.11.2 or higher (and Integrated Tunnels)
  • Create a card: Operator - Relational Greater Than
  • Create a card: Operator - Item Damage
  • Create a card: Operator - Item Max Damage
  • Create a card: Operator - Arithmetic Subtraction
  • Create a card: Integer - 10 (or whatever damage you desire)
  • Create a card: Pipe 2 - Put the Item Max Damage card on the left, the Item Damage card next to it (in the middle) and the Arithmetic Subtraction card on the right
  • Create a card: Apply - put your Relational Greater Than in the left slot (input 1) and your Integer (10) card on the right
  • Create a card: Pipe - Put your Pipe 2 card in the left slot and your Apply card in the right slot
  • Put your new Pipe card into the Import/Export Items Predicate slot
You will have a card that moves any item where 10 > (Item Max Damage-Item Damage).

24 октября 2014 г.

PHP - логирование POST запросов

Бывают ситуации, когда требуется сохранить в лог содержимое $_POST (переменную POST запроса). Например, когда злоумышленник отправляет команды в файл, запрятанный на сайте, или при атаке большим количеством запросов POST, чтобы не только понять на какой адрес проходит атака (эту информацию можно получить из стандартных LOG-файлов web-сервера), но и какие данные используются.

Логирование POST-запросов при помощи PHP

Наиболее доступный (в том смысле, что не требует правки конфигурационных файлов веб-сервера) способ сохранения информации о содержимом переменных POST - сохранение переменной $_POST примерно следующим кодом:
// lev_save_post.php
$filename = dirname(__FILE__).’/log-post.txt’;
if (!empty($_POST)) {
$dh = fopen ($filename,’a+’);
fwrite($dh, var_export($_POST,true));
fclose($dh);
}

Теперь маленькая хитрость, которая заключается в том, что все запросы, которые приходят на сервер нужно пропустить через этот файл. Для этого как нельзя кстати подходит директива PHP-ini auto_prepend_file , которую можно подключить используя следующий код (вставляем в .htaccess, путь для надёжности указываем полный):
# .htaccess в корне добавим следующую строку
php_value auto_prepend_file /home/user/www/lev_save_post.php

Логирование POST запросов через Nginx

Для настройки логирования POST-запросов при помощи nginx следует добавить в нужный location следующие строки
log_format logpost $request_body;
access_log /var/log/nginx/post.log logpost;

Логирование POST запросов в Apache

Для логирования POST запросов в Apache 1 можно использовать mod_security.

SecAuditEngine On
# тип логирования Concurrent или
SecAuditLogType Concurrent
# путь к индексу
SecAuditLog /var/log/apache-post/index
# Каталог для запросов
# запросы сохраняются во вложенных каталогах день/транзакция
SecAuditLogStorageDir /var/log/apache-post/data
# логирование всех данных
SecAuditLogParts ABCDEFGHZ
# Используем POST данных.
SecFilterScanPOST On
SecFilterEngine On
# сохраняем загруженные файлы
SecUploadDir /var/log/apache-post/files
SecUploadKeepFiles On

В Apache2 есть упрощённый аналог исключительно для сохранения Post данных mod_log_post
mod_dumpio в Apache 2 также позволяет сохранять нужные данные http://httpd.apache.org/docs/2.2/mod/mod_dumpio.html

# Dump all input data to the error log
DumpIOInput On
DumpIOLogLevel debug


Источник: Заметки Лёвика

2 октября 2014 г.

Stream "Now Playing" feature

https://obsproject.com/forum/resources/smg-now-playing.46/
Полезная штуковина если нужно отображать название трека, который сейчас играет.

29 сентября 2014 г.

SoundCloud Playlist Shuffle

Виджет для рандомизации очереди выполнения трэков виджета SoundCloud: https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/playlists/52259130

// via http://stackoverflow.com/a/6274381
//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]

require(['lib/play-manager'], function (a) {
    function shuf(o) {
        for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    }
    shuf(a.source.models);
    var c = a.getCurrentSound(), p = c ? c.isPaused() : false;
    a.playNext();
    a.playPrev();
    if (p) {
        a.pause(c);
    }
});

Источник

20 декабря 2013 г.

Веб-тулы для проверки регулярных выражений

Пара удобных онлайн-инструментов для тестирования регулярок:

http://gskinner.com/RegExr/ - сделано на Flash, поддерживается, по моему, только PCRE.

Достаточно удобный интерфейс, есть возможность сохранять шаблоны на будущее, есть база примеров шаблонов (много примитивов, но есть и пара сложных).

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

Кроме "поиск" по шаблону, есть "замена" по шаблону - прописываем шаблон, прописываем на что менять, вставляем исходный текст и получаем в отдельном поле текст с произведенной заменой.

Отдельно нужно оговорить, что при наведении на шаблон, подсвечиваются группы и выдается подсказка, что конкретная часть шаблона делает. Не всегда работает корректно, замечены глюки с использованием экранированных спец-символов. Например, при поиске названия функции по такому шаблону - "([^\s\(]+)" - при наведении будет писать, что не найдена закрывающая скобка.



http://regex101.com/ - сделано на JavaScript, поддерживается PHP (PCRE), JavaScript, Python.

Дизайн также довольно удобен, но данный сервис "одноразовый" - ничего нигде не сохраняется. Главное отличие от предыдущего сервиса - улучшенная работа с разбором регулярных выражений - автоматическое выделение групп в самом шаблоне разными цветами (и, по моему, такими же цветами и в исходном тексте подсвечивается найденное, но не уверен).

Два самых важных отличия - отображение результатов и детальный разбор шаблона.

Отсутствие "замены" компенсируется наличием отображения результатов поиска, чего в первом инструменте нет.

Детальный же разбор шаблона - крайне полезная штука. Благодаря ему для себя узнал интересные особенности работы регулярных выражений с повторяемыми "группами захвата". Оказывается, сохраняется только последняя.

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