Failed to validate oauth signature and token

На досуге, решил навоять один сервис, который тесно интегрирован с социальными сетями, в частности с твиттером. Во время работы, натолкнулся на интересную ошибку, в "некоторый момент", апи твиттера вылетает и начинает на любые запросы отдавать 401 ошибку. Не авторизован ты и все.

Ну, а я чё? Я парень простой и решил идти по дебаг трейсу и разбираться в чем ошибка. Предварительно я конечно погуглил эту проблему и даже почитал автора либы которую я использую для связи с твиттером, но решений там не нашел.

Тихо и не спеша, я просрал на это дело около трех вечеров, по 1-2 часа вечером выделяю на проекты. Что самое странное, апи то работало, то не работало и уловить динамику появления ошибки у меня не получалось.

А решение, как обычно было рядом, проблема была в том, что я захлопывал крушку ноутбука :D Точнее так, сервисы я стараюсь сразу делать в родной среде, тобишь на линуксе, для этих делов, у меня есть virtualbox, в котором живут виртуалки с линуксом. Пока я работаю над одним сервисом, выключать виртуалки не приходится. Я их просто перетащил на другой рабочий стол и сижу себе спокойно по ssh, делаю tail -f на лог ошибок. Собственно, паттерн работы с ноутбуком, подразумевает что выключать его приходится редко, а засыпать часто. Ну и вот, после просыпания, в виртуалках время не синхронизировалось, а оставалось тем, в какой момент ноутбук засыпал. Из-за этого, при подписывание запросов, они подписывались не правильно и апи твиттера посылал меня на болт считая жуликом.


Translimit.sh patch

Поднимая в очередной раз тему моего NAS'a, хочу обратить внимание владельцев на поломанный translimit.sh. Это скрипт, который запускается по крону и производит ротацию ваших торрентов, что бы они запускались или останавливались, нарабатывали ratio и т.п. В версии выложенной на сайте и форуме readynas, есть ошибка и поэтому он не работает с новыми версиями transmission.

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

Строку:

RATIO="$($REMOTE $TRANSOPT -t $ID -i | grep Ratio | awk '{ print $2; }')"

 

Заменить на:

RATIO="$($REMOTE $TRANSOPT -t $ID -i | grep Ratio: | awk '{ print $2; }')"

PHP — fastcgi_finish_request

А вы знаете про эту замечательную функцию?

Если кратко, то используя ее можно заставить приложение отдавать контент пользователю гораздо быстрее, разделяя логику приложения на "это необходимо пользователю" и "это пользователю не очень важно". Когда php работает в fastcgi режиме, например в популярной связке nginx+php-fcgi, у вас появляется возможность сначала посчитать все данные которые необходимы что бы отдать пользователю страницу, а уже потом, когда страница отдана и nginx отдает ее клиенту, можно выполнить все остальные действия, например отправить письма или обновить кэш или запустить некие механизмы очистки.

Нужно отдельно упомянуть, что для правильной работы, fastcgi_finish_request должен запускать после session_write_close и ob_* функций.

Простой пример:

<?
    echo 'Hello word';
 
    // В данной реализации, данные отдадутся в клиенту сразу,
    // а если закомментировать вызов fastcgi_finish_request(),
    // клиент будет ждать 10 секунд, до того, как получит ответ.
    fastcgi_finish_request();
 
    sleep(10);

  Нет комментариев   20 сентября 2011   Полезное  

9 million hits/day with 120 megs RAM

Оставлю у себя в закладках.
After checking this for about 9 months, I can tell you this almost always reads that number: 300 microseconds. This is about one third the time a camera flash illuminates. That’s, well, pretty quick. When I started, my software was taking about 0.25 seconds (250 000 microseconds) to produce the front page of my website. I needed to improve performance by over 800x.
Далее

, ,   Нет комментариев   13 сентября 2011   Полезное  

Node Saver

Примерно в марте месяце, пока мне было скучно и хотелось поиграться с MongoDB, я решил сделать свой аналог замечательного сайта peeep.us. Дело в том, что peeep.us хоть и жутко удобный, но не совсем безопастный, добавленные туда страницы потом хрен удалишь и самое ужасное, он открыт к индексации. Кстати все кто хочет почитать лепру но не имеют туда доступа могут ..., ну короче намек поняли, все как с мегафоном.

Первую версию, которая на момент публикации поста, живет на save.rpsl.info я написал часа за четыре, из них примерно два часа я искал у кого своровать дизайн :D

После этого, я решил что связка php и mongodb для такой микрозадачи не нужна и решил переписать ее на node.js. За несколько вечеров я разобрался и сделал и то, что хотел. В конечном варианте полностью отказалася от MongoDB и заменил его на Memcached. Зачем мне тут монго? Данные я кладу на несколько дней, данных мало, заодно и решится вопрос с их очисткой, а то, что не надежно, ну и фиг с ним. Ничего ценного там хранить смысла нету, а статистика ребута memcached'a на серваке говорит о том, что если раз в полгода я и потеряю данные, то ничего страшного не произойдет.

И все бы было хорошо, но я не решил главную проблему - сохранение работает только для открытых источников, как передавать страницу с сайта, которая закрыта basic auth я не придумал. У меня есть конечно несколько идей, но проверять их мне слишком лениво. Вторая проблема в том, что мне не хочется из-за этой мелочи поднимать на боевом серваке Node.JS, в какой-то момент пробовал взять виртуалку у clodo.ru, заодно потестировать его, но тесты оказались плачевными, потом хотел у alice2k стрельнуть кусочек vds, но уехал в Испанию и снова забил на это.

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

Сегодня мне захотелось ее удалить, поэтому я решил выложить сорцы на github

В общем форкайте меня, все дела. https://github.com/Rpsl/node-saver