Skip to content


Гневное письмо в банк

Заявление

Управляющему Тамбовским филиалом
ОАО АКБ «********-Банк»
********** *. *.
От Потерпевшего ********** ********* *********
г. Тамбов, ул. ************, д. **,кв.**

Уважаемая Ольга Юрьевна!

Вчера 30.08.2006 закончив тяжелый рабочий день, я направился к банкомату, что по улице Октябрьской, д 1. По дороге я напевал «деньги-деньги дребеденьги» и отчетливо представлял, как конвертирую презренные бумажки, на вечер с прекрасной знакомкой в каком-нибудь близлежащем кафе. Ничего не подозревая, я подошел к банкомату, вставил карту, набрал пин-код и решив что 1500 (одна тысяча пятьсот) рублей вполне подходящая сумма (и голодным не останешься и жаба потом душить не будет) я нажал «Ввод». Ну а поскольку в нашем офисе введен режим жесткой экономии бумаги, то на предложение автомата распечатать чек, я ответил решительным отказом. Ведь как-никак мы с Вами один холдинг, а стало быть делаем общее дело и должны помогать экономить друг другу, пусть даже на банковских чеках.

В момент ожидания денег я задумался и ярко представил себе холодную кружку пенной «Крушовицы». горячие баварские колбаски с горчицей, которые только пару минут как сняли со скворчащей сковородки, атмосферу тепла и уюта, веселых друзей и симпатичных подруг. Каких-то 20 минут отделяли меня от праздника жизни, где нет места начальникам и подчиненным, закулисным интригам и подковерной борьбе....И в этот момент я посмотрел на отверстие в банкомате, откуда обычно подаются купюры. Там уже лежали и ждали пока я ими овладею, мои кровные 1500 руб. Но только было я протянул руку за ними, как что-то проскрипело, зажужжало и как по мгновению волшебной палочки, деньги втянулись в банкомат обратно. Мир рухнул - вот первое что я подумал на тот момент. Но вслух лишь произнес слово, отражающее краткую характеристику пользующейся дурной славой девушки, которое я здесь не могу привести по причине своего хорошего воспитания.

Надеясь на лучшее, я проверил баланс, но оказалось, что деньги уже списались с моего счета. И тут. казавшийся таким приятным вечер мгновенно изменился. Исчезли и перспективы встречи с любительницами «Крушовицы» и баварские колбаски, тепло и уют в придачу. Я стоял у бездушного банкомата и задавался вопросами:
1. Почему все гак не правильно на этом свете и где вселенская справедливость?
2. Почему всего можно добиться только обманом и ложью?
3. Почему хорошие люди живут мало, а плохие долго?
4. Почему люди координируют свои действия, руководствуясь только личной выгодой?
5. Как можно без денег насладиться пивом, колбасками и обществом прекрасной знакомки?

Покурив и поразмыслив над суетностью бытия, я решил, что если хорошенько подумать, то в принципе, ну так, чисто теоретически, я могу выделить еще одну сумму эквивалентную 1500 руб. на проведение сегодняшнего вечера. И уже без особого энтузиазма, я снова поплелся к банкомату. Опять же по привычке вставив карту и набрав пин-код, я стал ждать вожделенной компенсации из цветных бумажек. Но на этот раз вылез только чек, хотя я его не просил и карта. На чеке была надпись, обозначающая полное фиаско, а также то, что засну я сегодня голодным, трезвым и в одиночестве, а именно: «Извините, в банкомате кончились купюры» (этот чек я сохранил, на случай если у Вас также введена экономия бумаги и Вам приходится распечатывать новые чеки на обратной стороне старых. И могу его вам передать по случаю).

Нет я не стал портить имущество ОАО АКБ «*****-Банк» и знакомить окружающих с новыми лексико-семантическими конструкциями. Я вдруг четко осознал, что мы с вами часть одной команды, вместе настроенные на достижение результата. И только совместные усилия приведут нас к победе в обозримом будущем. Не могу не поделиться своей рационализаторской находкой. На данный момент, как я понял, время ожидания банкомата составляет 30 секунд. После этого времени он «втягивает» деньги назад. Настоящим предлагаю сократить время ожидания банкомата до 5 секунд, а из «втянутых» обратно в банкомат денег сформировать премиальный фонд работников ОАО АКБ «*****-Банк». Акцию можно провести под лозунгом: «Тренируя реакцию. Вы повышаете рождаемость». Как автор идеи я претендую на 15% от суммы и по возможности на место в совете директоров.

P.S. Прошу зачислить насильственно отнятую у меня банкоматом сумму в размере 1500 руб. на счет моей пластиковой карты.

Posted in Развлекуха.


Штучки с sed-ом

sed – это stream editor. Часто используется в скриптах для различных преобразований текста. Очень мощный инструмент, если понять как он работает. Ниже приведено несколько типичных примеров.

  1. Удаление из файла заданных строк.
    Пусть, например, нужно удалить строки из файла, в которых содержится подстрока "phone: xxx-xx-xx" (вместо символа x - цифры):

    sed "/phone: [0-9]\{3\}-[0-9]\{2\}-[0-9]\{2\}/ d" test.txt

    Здесь между слешами (/) задается шаблон (регулярное выражение), после него стоит оператор "d" (от слова delete), который удаляет строки файла test.txt, совпадающие с шаблоном. Результат:

    $ cat test.txt
    phone: 111-22-44
    phone: 111-22-45
    phone: 311-22-d4
    phone: 111-22-55
     
    $ sed "/phone: [0-9]\{3\}-[0-9]\{2\}-[0-9]\{2\}/ d" test.txt
    phone: 311-22-d4

    Для противоположного эффекта (если хотим удалить из файла строки, НЕ попадаюащие под шаблон) нужно добавить восклицательный знак после закрывающего регулярное выражение слеша:

    $ sed "/phone: [0-9]\{3\}-[0-9]\{2\}-[0-9]\{2\}/! d" test.txt
    phone: 111-22-44
    phone: 111-22-45
    phone: 111-22-55

    Если нужно, чтобы изменения происходили сразу в файле, без вывода в stdout, нужно добавить ключ --in-place (-i).

  2. Добавление в файл строки в определённом месте.
    Вставляем мета-тег с указанием кодировки документа перед закрывающим тегом </head> во все файлы с расширением .html в текущей директории:

    sed -i '/<\/head>/ i <meta http-equiv="Content-Type" content="text\/html; charset=utf-8">' *.html
    sed -i -r "s/\r//g" *.html

    Второй sed нужен чтобы поудалять символ возврата каретки с ASCII-кодом 13 в конце строк, который почему-то появляется в результате работы первого sed-а.

  3. Удаление из файла первых нескольких строк до тех пор, пока не встретиться пустая строка. Такое часто бывает нужно при обработке писем – если нужно отделить заголовок письма от его тела:
    $cat test.txt
    Some text in mail header.
    Another text line in mail header.
    And so on...
     
    Here starts mail body.
    Some text in mail body.
    Use sed to make things nice :)
     
    $sed '1,/^$/ d' test.txt
    Here starts mail body.
    Some text in mail body.
    Use sed to make things nice :)

    Здесь видно, что первые три строки были удалены. Шаблон /^$/ означает пустую строку (символ ^ совпадает с началом строки, а символ $ – с концом строки. Так как между ними ничего нет, то строка пустая). Выражение 1,/^$/ означает диапазон строк с 1-ой до пустой включительно. Оператор "d" – удаление.

  4. Получение заголовка usenet/email письма (удаление всего после 1-ой пустой строки):
    sed '/^$/q' /tmp/mail_message
  5. Вставить пустую строку перед строкой, совпадающей с регулярным выражением “regex”:
    sed '/regex/{x;p;x;}' test.txt
  6. Вставить пустую строку после строки, совпадающей с регулярным выражением “regex”:
    sed '/regex/G' test.txt
  7. Удаление комментариев и пустых строк. Допустим, мы хотим в каком-то конфиге посмотреть только самую его суть, не отвлекаясь на комментарии и объяснения что означают используемые опции. Для этого используем такую простую команду:
    $egrep -v "^#" /etc/snmp/snmpd.conf | sed '/^$/ d'

    В результате grep уберет из файла /etc/snmp/snmpd.conf строки, в начале которых стоит символ решётки (но оставит пустые строки), а следующий за ним sed найдёт и удалит строки, у которых между началом и концом строки ничего нет.

  8. Замена текста. Для этого используется оператор s///:
    $cat test.txt
    I want to have nice house with 4 rooms.
     
    $sed "s/\(nice\)/very \1/" test.txt | sed "s/[0-9]/12/"
    I want to have very nice house with 12 rooms.

    В операторе замены s (чаще всего используется его вариант s///) между 1-ым и 2-ым слешем указывается шаблон, который нужно найти для замены, а между 2-ым и 3-им слешем – текст, НА который нужно заменить шаблон. Если в шаблоне используются круглые скобки (их нужно экранировать обратными слешами), то текст между скобками будет доступен для использования во второй части оператора (это называется backreference). Для вставки текста, заключенного в 1-ую пару скобок, применяется конструкция \1, для текста между второй парой скобок – \2 и т.д. Символ амперсанда (&) в правой части используется для вставки текста, который совпал с регулярным выражением в левой части. Вместо слеша в операторе s можно использовать любой другой символ, например:

    $ echo "I want to have a nice house with 4 rooms." | sed "s|nice|very &|"
    I want to have a very nice house with 4 rooms.

    Если нужно заменить все вхождения шаблона в строке, а не только первое, то нужно использовать флаг g (от слова global):

    $ echo "AAABBBCCC" | sed "s/A/X/"
    XAABBBCCC
    $ echo "AAABBBCCC" | sed "s/A/X/g"
    XXXBBBCCC

    Если нужно заменить не первое вхождение шаблона в тексте, а какое-то N-ое, то нужно использовать флаг N (который также можно комбинировать с флагом g --- в этом случае заменится N-ое И все последующие совпадения шаблона в тексте):

    $ echo "AAAA-BBBB-CCCC" | sed "s/A/X/2"
    AXAA-BBBB-CCCC
    $ echo "AAAA-BBBB-CCCC" | sed "s/A/X/3"
    AAXA-BBBB-CCCC
    $ echo "AAAA-BBBB-CCCC" | sed "s/A/X/2g"
    AXXX-BBBB-CCCC
  9. Удаление HTML-тегов
    sed -e :a -e 's/<[^>]*>//g;/</N;//ba' index.html

    Фрагмент ;/</N;//ba предназначен для удаления тегов, растянутых на несколько строк. Без него будут удаляться только те теги, которые были закрыты угловой скобкой в той же стройке, в которой были открыты.

  10. Удаление символов перевода строки (объединение всех строк файла в одну)
    cat /tmp/file.txt ; echo ; sed ':a; /$/N; s/\n//; ta' /tmp/file.txt
    Это строка N1
    А это строка номер 2
    This is line number 3
     
    Это строка N1А это строка номер 2This is line number 3
  11. Преобразование регистра. Конвертация из строчных в прописные:
    $ echo "UPPer And lowER CASE mixed" | sed 's/.*/\U&/'
    UPPER AND LOWER CASE MIXED

    Конвертация из прописных в строчные:

    echo "UPPer And lowER CASE mixed" | sed 's/.*/\L&/'
    upper and lower case mixed
  12. Удаление последней (лишней) запятой из JSON-файла:
    $ cat somefile.json | sed -zr 's/,([^,]*$)/\1/'

Posted in *nix, Howto.

Tagged with .


WordPress: борьба со спамом

Посвящается тем, кого утомили тонны спама в комментариях, оставляемые с единственной целью – повесить ссылку на продвигаемый спамером сайт. Есть, конечно, для этого дела много разных плагинов, типа Akismet, Bad Behavior, Parasite Eliminator. Но мне больше нравится следующий простой и эффективный метод, не требующий установки никаких плагинов. Нужно просто переименовать поля формы для ввода комментария. И всё! Спамерское программное обеспечение, которое рассылает спам по блогам в автоматическом режиме, как раз и ориентируется на наличие полей в форме с определенными именами. Куда и пытается совать всякую фигню типа "Отличный блог, добавил в закладки :)" ни в коем случае на забывая оставить ссылочку. В случае с WordPress это поля comment, email, url и author. Поэтому в директории, соответствующей установленной теме, нужно отредактировать файл comment.php следующим образом.

  1. Для начала 41-ую строку файла /wp-content/themes/<ваша тема>/forms/comment.php
    <textarea name="comment" id="comment" rows="8" cols="40" tabindex="1"></textarea>

    меняем на:

    <textarea name="komment" id="komment" rows="8" cols="40" tabindex="1"></textarea>
  2. Далее 55-ую строку того же /wp-content/themes/<ваша тема>/forms/comment.php
    <input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="2" />

    меняем на:

    <input type="text" name="aftar" id="aftar" value="<?php echo $comment_author; ?>" size="22" tabindex="2" />
  3. 60-ую строку файда /wp-content/themes/<ваша тема>/forms/comment.php
    <input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="3" />

    меняем на:

    <input type="text" name="pochta" id="pochta" value="<?php echo $comment_author_email; ?>" size="22" tabindex="3" />
  4. 72-ую строку
    <input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="4" />

    меняем на:

    <input type="text" name="sait" id="sait" value="<?php echo $comment_author_url; ?>" size="22" tabindex="4" />
  5. Затем в файле /wp-comments-post.php меняем код, где упоминаются эти поля формы:
    $comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null;
    $comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null;
    $comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null;
    $comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;

    Заменяя оригинальные имена на полей на те, что придумали ранее:

    $comment_author = ( isset($_POST['aftar']) ) ? trim(strip_tags($_POST['aftar'])) : null;
    $comment_author_email = ( isset($_POST['pochta']) ) ? trim($_POST['pochta']) : null;
    $comment_author_url = ( isset($_POST['sait']) ) ? trim($_POST['sait']) : null;
    $comment_content = ( isset($_POST['komment']) ) ? trim($_POST['komment']) : null;
  6. Лично у меня после этих модификаций спам полностью прекратился. А до этого было по 15-20 штук спамерских сообщений в сутки. Хоть на сайте они и не появлялись, так как Akismet их прилежно отлавливал, но все равно нужно было вручную удалять из админки весь этот хлам, чтобы не замусоривать базу данных. Новые имена полей могут быть любыми, лишь бы они отличались от исходных.

    Недостаток такого метода в том, что после обновления WordPress изменения, скорей всего, потеряются и нужно будет либо проделать правки заново, либо пред обновлением сохранить файлы comment.php и wp-comments-post.php, а после обновления – заменить новые на старые. Кроме того, спам через trackback-и все равно пролезет. Поэтому нужно либо их запретить (например, правилами модуля Apache ModRewrite), либо поставить какой-то плагин вроде Simple Trackback Validation.

    Все это проверялось на версиях WordPress 2.9.0 и 2.9.1. Для других версий могут быть отличия в коде и в номерах строк.

Posted in Howto, Веб-приложения.

Tagged with .


Обналичка чеков

Почитав на форумах о мытарствах наших соотечественников с обналичкой чеков AdSense в украинских банках, хочу сообщить народу о сервисе обналички чеков EPayService. Комиссия - 2,5%. С момента отправки чека из областного центра Украины в Санкт-Петербург до возможности вывода на webmoney проходит 3-4 недели. Удобно тем, что не надо связываться с зажравшимися банками, выстаивать в очередях, тратить нервы на общение с зачастую некомпетентными сотрудниками банковских учреждений и вообще никуда ходить (за исключением одного похода в почтовое отделение для отправки чека). Схема простая:

  1. Регистрируемся в сервисе.
  2. Подписываем полученный чек в рамке с надписью "endorse here", так как описано в разделе "Реквизиты для чеков" личного кабинета
  3. Отправляем чек по обычной почте в г. Санкт-Петербург по адресу, указанному в личном кабинете в разделе "Реквизиты для чеков".
  4. Ждем 2-3 недели получения SMS на Ваш мобильный телефон о приходе чека в г. Санкт-Петербург. После этого информация о чеке будет доступна в разделе "Баланс по счету" личного кабинета
  5. Еще ждем 7 дней следующей SMS о возможности вывода средств.
  6. Заходим в личный кабинет в раздел "Вывод средств" и переводим деньги на кошелек webmoney:

    Вывод средств из epayserviceЗначение в поле "сумма перевода" должно быть как минимум на 0,8% меньше текущего баланса (комиссия webmoney).

Сервис перечисляет средства на WMZ-кошелёк (долларовый). Если нужно потратить титульные знаки webmoney на сайтах, которые принимают отличные от WMZ валюты (большинство украинских сайтов работает с WMU), то можно воспользоваться онлайн-обменниками.

С 2010-го года процесс обналички в EPayService по времени можно значительно сократить, благодаря новой ускоренной процедуре обработки чеков. По информации на сайте EPayService, надо всего лишь отсканировать чек с двух сторон, загрузить сканы чека в личном кабинете и отправить оригинал чека по почте в офис EPayService. Как только оригинал чека поступает в офис, Вам выплачиваются деньги по чеку (становятся доступны для вывода). Чек поступает на обналичивание практически сразу, после загрузки сканов чека в форму, расположенную в личном кабинете. Это дает реальное сокращение срока получения денег по чеку (с момента отправки до момента получения) минимум в 2 раза, а максимум в 4 раза. Фактически это время пересылки оригинала чека по почте в офис представительства в г. Санкт-Петербург.

Вот моя статистика. Первые две строки таблицы --- это работа по "старой" схеме, без загрузки скана. Последние две строки --- это "новая" схема (услуга iCheck).

Отправка по почте Загрузка скана Приход чека в Питер Зачисление на счёт
2009-10-15 --- 2009-11-09 2009-11-16
2010-04-30 --- 2010-05-23 2010-05-30
2010-07-11 2010-07-13 --- 2010-07-25
2010-09-13 2010-09-13 --- 2010-09-29

Как видно, реально имеет место ускорение процедуры примерно в 2 раза. Если раньше с момента отправки чека по почте до момента зачисления средств на внутренний счет EPayService проходило 30-31 дней, то теперь (с предварительной загрузкой скана чека) только 14-16 дней. Также есть некоторые различия в порядке информирования. Раньше приходило 2 СМС: первая когда чек доходил по почте в Санкт-Петербургский офис EPayService, вторая --- когда средства зачислялись на счет. Теперь (в схеме с iCheck) в тот день, когда средства зачисляются на счёт, приходит СМС и уведомление по email. И еще один email приходит в тот день, когда средства со счёта EPayservice перечисляются на кошелёк Webmoney.

А еще осенью 2010-го года был обновлён интерфейс личного кабинета, он стал более современным и более, на мой взгляд, дружественным, а также появилась возможность заказа платисковой карты ePayService MasterCard, что даёт возможность вывода средств напрямую на карту с последующим их снятием в любом банкомате. Тип карты --- MasterCard Standard. Учитывая весьма приличные тарифы на выпуск и обслуживание, пользоваться ими, имхо, имеет смысл только при достаточно больших денежных потоках (от нескольких сотен долларов в месяц). Очень интересная особенность данной карты --- комиссия за снятие налички в банкомате не зависит от суммы снятия (фиксированная).

По теме: Правила оформления почтовых конвертов

А вот тут одна поучительная история на тему как работают наши банки: получение кредитки в ВТБ24

Posted in Деньги, Разное.

Tagged with , .