Слушаем вызовы функций javascript

Многие знают о механизме Event-Dispatcher-Listener'ов, реализованному во многих языках программирования. Я же создам подобный механизм не для Event'ов, а для любого метода объекта Javascript — Object.
Я не претендую на оригинальность, нет. Основная цель статьи — рассмотреть интересные механизмы прототипирования в Javascript, создание декораторов и, собственно, постараться хоть немного раскрыть мощь и гибкость это чудесного языка, который так часто обижают и недооценивают.

UPD1: краткое содержание:
1. Создание декоратора на Javascript
2. Создание механизма Function call listener с помощью декораторов

UPD2: от 09.06.2009
В конце статьи я добавил раздел Update: Decorator Mark II. В нём — исправления и улучшения (я не перекраивал всю статью из-за этого)

Итак, первый (и, надеюсь, не последний) рецепт в моей поваренной книге Javascript. Читать полностью »

Взломать сайт или редактирование страниц

Заходим на любой сайт в интернете (к другу — пошутить, к врагу — напакостить), и в адресной строке вашего браузера пишем следующую строчку, и нажимаем ENTER:

javascript:void(document.body.contentEditable = true);

После этого «переделываете» страничку так как вам вздумается (меняете текст, картинки и т.д.), а готовую «работу» выводим на принтер. Читать полностью »

Делаем 301 редирект для сайтов на asp

Бывает необходимость сделать 301 редирект, например, когда сайт переезжает на новый домен (адрес).
Для сайтов, расположеных на сервере в web-сервером Apache достаточно создать в корне файл .htaccess и прописать в нем необходимые директивы серверу.

Но так как web-сервер IIS не поддерживает управление через .htaccess, его использовать нельзя.

Но и тут ничего сложного нет. Необходимо в начале asp скрипта добавить

Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.site.ru"

"http://www.site.ru" - адрес, на который нужно редиректить

Доработанный antileech модуль к nginx (ngx_http_secure_link_module)

В конфигурационный файл добавлена директива secure_link_timeout, которая определяет время жизни ссылки в секундах (по умолчанию 3600 секунд - 1 час).

URL защищённой ссылки теперь выглядит так:

/prefix/hash/timestamp/file

Поле timestamp представляет собой hex-предстваление unixtime.
MD5-хэш счиается от имени файла, поля timestamp и секретного слова (указывается директивой secure_link_secret).

Таким образом, сначала сравнивается поле timestamp с разницей текущего времени и таймаута. Затем проверяется md5-хэш.

Ссылку можно сформировать таким образом: (пример на php):

< ?php $secret = 'topsecretword'; $fname = 'file.ext'; $ts = sprintf("%08x",strtotime("now")); echo '/' . md5($fname . $ts . $secret) . "/{$ts}/{$fname}n"; ?>

Патч применяется к файлу ngx_http_secure_link_module.с web-сервера nginx версии 0.7.41. Читать полностью »

Меняем прямые ссылки на редиректные в wordpress. Плагин wp-redir-links

Данный плагин позволяет менять обычные прямые ссылки на редиректные

В архиве содержится два файла wp-redir-links.php и r.php
Файл wp-redir-links.php следует закачать в папку плагинов "/wp-content/plugins/", а r.php - в корень сайта "/"

В файле wp-redir-links.php изменить значение переменной $domain

$domain = "www.ruscript.net";

на ваш домен

Пример использования Читать полностью »

Запрещаем копирование текста со страниц

Часто тексты со страниц по-просту воруют и публикуют на своем сайте, причем не проставляя ссылки на источник.
Можно отключать выделение текста для любого блока, например, для определенного div'а. Если поставить данный код для тега body, будет запрещено выделение всей страницы

В блок, в котором мы хотим запретить выделение текста необходимо добавить обработчик для javascript (используется для браузеров Internet Explorer)

onselectstart="return false"

и css-стили (используется для браузеров FireFox (на движке gecko), Safari (на движке KHTML))

-moz-user-select: none; //Firefox
-khtml-user-select: none; //Safari
user-select: none; //работает в css3

Для Браузера Opera необходимо писать дополнительную функцию preventSelection(); (листинг функции ниже)
Функция запрещает выделение во всем документе, кроме элементов input и textarea

Вызвать данную функцию

preventSelection(document);

Однако текст можно с легкостью скопировать, всего лишь заглянув в исходный html-код страницы

Такой способ может помочь в защите текстов от людей, но никак не поможет от роботов (программ, которые скачивают страницы целиком)

Пример Читать полностью »

Юмор: Исходный код ядра Linux

#include <stdlib.h>
#include <stdio.h>
#include <cerr.h>

#include <bash.h>

#define INFINITE ~0u

int main(int argc, char *argv[]) {
    printf("Hello world!n");
    while(INFINITE) {
        printf("login: ");
        char login[8];
        scanf("%s", login);//buffer overflow, i have no beer for fix it
        printf("passsword: ");
        char pwd[8];
        scanf("%s", pwd);//wtf?! beer! beer! beer!
        if(0.25 > rand() / (float)RAND_MAX) {
             startBash(login);
        } else {
             printf("Login is incorrect!n");
        }
        if(0.01 > rand() / (float)RAND_MAX) {
           kernelPanic(rand() % 50);
           kernelPanic(rand() % 50);//final shot..DIE! or beer..
        }
    }
    return 0;
}

ps: смотрим в комменты )

Скачать видео с сайта video.oboz.ua

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

Две минуты серфинга в поисковиках дали мне ответ на этот вопрос, оказывается все проще простого.

Видео-файлы формата .flv лежат по адресу

http://video.oboz.ua/files/movies/(quality)/(id).flv

где

quality - качество видео-файла, меняется в диапазоне 1-6. Чем больше значение, тем выше качество
id - идентификатор видео-ролика. Чтобы определить нужно извлечь его, например, из кода для вставки на сайт.
Для понравившегося видео выбираем: "Ссылка на видео" и извлекаем id из функции getPlayer();

Читать полностью »

MySQL и ORDER BY. Уменьшаем время выполнения запроса

Итак, что мы имеем.

  • 3 связанные таблицы, в них хранится порядка 2млн записей.
  • Запрос, где эти таблицы через LEFT JOIN собираются воедино.
  • Условие, что все должно быть отсортировано по имени.
  • Все должно работать быстро.

В общем то, вполне тривиальное задание, если бы не последнее условие

Рассмотрим на более простом примере. Таблица `catalog_software` с 25 тысячами записей. Без всяких связаных таблиц

SELECT * FROM `catalog_software` LIMIT 1000;

Запускаем запрос через phpMyAdmin - видим, что выполнение запроса заняло 0.09 секунд.
Задумываемся - что-то забыли... Ах да, сортировка. Быстренько все исправляем. Читать полностью »

Перенести файлы с одного сервера на второй без использования промежуточного хранения

Для данных манипуляций нам необходим доступ к серверу по ssh и бесплатная утилита putty

Сам порядок действий:

1. Заходите в ssh с помощью putty
2. Авторизируетесь (пишите логин и пароль)
3. Правой кнопкой мыши по виндовскому окошку с путти, где кнопки открыть, закрыть и название.. по синей полоске в общем. Выбираете пункт сеттинкс, находите там translation выбираете utf8.
4. В консоли путти пишите mc. Если он там есть, то откроется чтото типа нортона
5. В открывшимся mc выбираете в меню LEFT или RIGHT (сверху, выпадающее меню) ftp connection
6. Пишите адрес в виде login:password@host, жмёте enter
7. В выбранной панели путти будет открыт ftp
8. Закачиваете туда нужные файлы

Благодарим за инструкцию betam