Архив

Про webmoney

В прошлом посте я писал про молоток, вспомнил, что несколько месяцев назад со мной приключилась беда. Каким то неведомы макаром, мои ключи к киперу стали не действительными. Примерно в это же время, на одном несуществующем сайте, появился чувак который занимает руководящую должность в этой конторе. Он попросил всех рассказать свои success story про пользование системой. Ну вот я и рассказал. Сюда перенесу на память.

webmoney

Есть у меня виртуалка, живет уже много лет, в ней крутится только Win XP и кипер класик. Апдейты там еще какие–то ставятся хз. Кроме кипера и Google Chrome в ней вообще ничего нету используется раз в месяц для вывода денег из sape и транзита этих денег на оплату мобильника, инета, серверов.

Нажал в сапе на вывод денег, через пару дней запускаю виртуалку, т.к. деньги уже должны придти, ебать–колотить–супер–ошибка, вы вводите правильный пароль от файла ключей, но не правильный пароль от аккаунта. Наркоман штоле сука?, ну ок, следую инструкциям, нахожу в бэкапе файл ключей, скармливаю его киперу — вы используете устаревший файл ключей, блядь, да вы же сами просили его сохранить на дискету, не менял я пароли в кипере, вообще ничего не делал кроме как получить деньги — заплатить деньги. Пиздуйте на наш сайт, авторизуйтесь, подтвердите емаил, введи код из смс, заполните заявку на восстановление, авторизуйтесь, введите код из смс, сколько денег на счету? какие ваши доказательства? какой айпи? укажите емаил? фамилия вашей кузины, пришлите нотариально заверенную сетчатку глаза? Молодец, для подвтерждения что вы это вы загрузите сканы вашего пасспорта. Вы наркоманы там, у меня кипер к альфе привязан, у меня есть ебучий аттестат который я заебался получать, который гарантирует что я это я. Заявка без документов отменена. Начианайте квэст заново.

Через пару дней собрался силами и прошел этот квест снова, далее неделя ожидания и куча ебанутых писем на почту о статусе моей заявки "Костя из саппорта проверил ваши данные", "Дима из саппорта подтвердил ваши данные", "Ваша заявка передана из отдела саппорта в отдел заявок" — Нахуй мне это знать??? Мне важно что заявка получена вами и что на нее пришел ответ. Спустя неделю получил новый файл ключей, залогинился, снова, блядь, активируйте вашу систему, ссылка отправленна на почту.

Потом я уже почитал этот пост, решил сделать себе из кипер классик — кипер мини, енум, клиент для мака, полтора часа попыток понять что это и нахуй оно вообще нужно, 2000 пройденых каптч, 50 полученых смс и ачивка "Вебмани в МакОС" получена.

Спасибо. Охуеть. Сдохните.


Молоток.ру и забота о пользователях

В последнее время я достаточно щепетильно отношусь к своему почтовому ящику. Я начал это делать, после того как понял, что мне в день приходит более сотни левых писем о всяких акциях, скидках, конкурсах и прочие дайджест рассылки. Я отписался от 90% сервисов которые не представляют для меня интереса и жизнь вроде наладилась, дышать стало свободнее. Только остаются некоторые уебищные сервисы, отписаться от которых - дикий квест. Молоток.ру один из таких. Не помню по какому роковому стечению обстоятельств лет 8 назад я случайно завел там аккаунт, но точно помню, что с тех пор я его больше не посещал, а вот письма со всякой херней они продолжают слать мне до сих пор.

У вас кстати есть карточка от много.ру? Я ее случайно лет 10 назад завел. Прошло лет 9 как я ее потерял, но письма они продолжают слать, у них видимо не хватает мозгов додумать, что аккаунты которые не подавали активности последние 10 лет можно считать не валидными.

Так вот, возвращаясь к молотку. Как меня бесит, что нельзя отписаться от рассылки в один клик. Чтобы отписаться от рассылки, нужно пройти на их сайт, войти в свой аккаунт и там настроить систему уведомлений.

Ну ок, давайте попробуем так сделать. После ввода своего логина (для восстановления пароля), оказывается я должен ввести "некую" секретную фразу, которая, видимо, является вторым паролем. У меня такой нету, соответственно я должен пройти процедуру установки этой секретной фразы, несколько валидаций, только что бы отписаться от их рассылки. И что самое уебищное, то, что раздел "обратная связь", тоже, работает только с авторизованными пользователями.

trololo

Главной мыслью этой заметки является обращение к веб мастерам. Пожалуйста, делайте то, что нужно пользователям, а не то, чем вы занимаетесь.


Nginx detect mobile browser

Регулярка для Nginx

set $mobile_rewrite do_not_perform;

if ($http_user_agent ~* "android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge|maemo|midp|mmp|netfront|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") {
  set $mobile_rewrite perform;
}

if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-||_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {
  set $mobile_rewrite perform;
}

if ($mobile_rewrite = perform) {
  rewrite ^ http://m.site.com/ redirect;
  break;
}

Ну и собственно вот тут собранные подобные рецепты для различных языков и сервисов.


7000 rps на Nginx - Achievement unlocked

Вчера, мой уютный сервачок подвергся очередному стресс тесту.

Для тех кто не в теме, у меня тут еще живет сайт и форум группы CENTR, а вчера в Питере проходил концерт HipHop All Stars 2012. Организаторы повели себя достаточно круто и предложили всем заинтересованным смотреть прямую трансляцию с концерта. Мы стали одним из проектов, которые на главной странице разместили флеш плеер, по которому велась трансляция. Что бы людям не было скучно, подключил еще и комментарии от Вконтакте.

Респект Вконтакту, в пиковые моменты комментарии в прямом эфире появлялись со скоростью 3-4 штуки в секунду. Всего за день на странице появилось примерно 15 000 комментариев.

Когда я вечером зашел посмотреть модные графики, то был приятно удивлен. Пиковая нагрузка на MySQL была примерно 3000 rpm, на Nginx ~8000 rps.

mysql

Cудя по логам, ни одного slow request не было, как и не было 404 и 50x страниц.

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


PHP Memoize

Вчера ради интереса пересматривал pecl каталог модулей для php, наткнулся на интересный модуль memoize. Вспомнил, что сам делал его реализацию на уровне php+memcached.

Идея модуля крайне проста, у вас есть функция, результаты которой зависят исключительно от входных параметров, с помощью memoize можно закэшировать результаты выполнения и в последующие вызовы пересчет производиться не будет.

Так же нужно понимать, что код будет выполнен только один раз, поэтому использование, например, sql запросов в ф-ции не допустимо. Недопустимо использование global и его аналогов Static::$data, недопустимо использование ветвлений в зависимости от времени или окружения.

function my_expensive_function($x) {
    sleep(10);
    return $x . 'bar';
}

memoize('my_expensive_function');

// now calls to my_expensive_function() are cached by their arguments

echo my_expensive_function('foo'); // returns "foobar" in 10s
echo my_expensive_function('foo'); // returns "foobar" in 0.0001s

В общем идея понятна, на уникальность никак не претендует, но свою нишу может занять. Зачем использовать свой велосипед?