CakePHP DB reconnect

Февраль 19th, 2009 by mAd

Всего одна строчка

ConnectionManager::getDataSource('default')->reconnect();

‘default’ это конфиг с которым надо поднять базу.

reconnect() может принимать параметр, в виде массива-конфига.

Зачем это нужно

Если база настроена так, что может находится в режиме ожидания короткий промежуток времени, она закрывает соединение, и скрипт, который в начале инициализировал соединение а потом долго и упорно что то делал, не сможет обратится к базе.

Posted in CakePHP, PHP | No Comments »

blacklist в Wordpress

Сентябрь 30th, 2008 by mAd

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

Сам список можно редактировать через панель управления Settings->Discussion->Comment Blacklist

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

Собственно сам плагин: blacklist.zip

Posted in PHP | No Comments »

Lightbox2 и Opera

Август 9th, 2008 by mAd

Прикручивая lightbox2 к очередному проекту вылезла проблема.
если у окна есть скролл (к примеру на странице много контента, или размер окна браузера уменьшен), overlay закрывает не всю страницу, а только часть, в моём случае он закрывал участок страницы, размером с первый экран, и расспологал его в верхней части.

Способ решения:

Read the rest of this entry »

Posted in javascript | 9 Comments »

Terong Related Posts для Wordpress 2.5.x

Май 13th, 2008 by mAd

Столкнулся с проблемкой, плагин “Terong Related Posts” не захотел работать в Wordpress 2.5, причём не рабочее состояние характеризовалось отсутствием соответствующей ссылки при редактировании поста. Исправил.
Исправленный фаил

Posted in PHP | No Comments »

Linux - Определение кода мультимедиа клавиш

Апрель 26th, 2008 by mAd

Давно обещал, но долго забивал.

Этот пост является неким продолжение рассказа о том как же настроить под себя работу мультимедиа клавиш.

Для определения кода понадобится утилита xev. В debian она вроде есть по умолчанию (точно не знаю, давно систему не устанавливал нигде). Запустив её в X терминале, появится окно с квадратиком… вобщем это не важно. теперь нажимаете на свои клавиши и смотрите что вам выдало в консоли. в идеале там должно появится что то вроде:
KeyRelease event, serial 29, synthetic NO, window 0x1800001,
root 0x155, subw 0x0, time 2353278841, (94,-3), root:(104,65),
state 0x10, keycode 174 (keysym 0×1008ff11, XF86AudioLowerVolume),
same_screen YES,
XLookupString gives 0 bytes:
…..

Выделяем из общего потока что то вроде keycode 174, где 174 код клавиши которую вы нажали.
Но это в идеале, у меня к примеру такой финт не прокатил. Заработало всё только при нажатии нескольких клавиш. Нажимаем одну, не отпуская, вторую, потом одну из клавиш отпускаем, на консоле должны появится долгожданные строчки, код в которых предназначен для клавиши которая осталась нажата…

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

Posted in Debian | No Comments »

Каптча (CAPTCH) для CakePHP

Март 28th, 2008 by mAd

Уже есть несколько компонентов для CakePHP которые реализуют каптчу, и я некоторое время использовал их, но чемто они мне не нравились (или я не нашёл ту которая бы мне понравилась).

Однако мне понравилась каптча, которую предлагет CAPTCHA.ru.

Взяв их код, я сделал компоненту. Которой и хочу поделится.

Скачать код можно здесь: captcha component

Как использовать

1. Распаковываем архив и встраиваем в свой проект.

2. Добавляем в список компонент, которые будет использовать контроллер

$components=array("Captcha");

3. В нужном action пишем строчку

$this->Captcha->generate();

это сгенерирует новую строку и запишет её в сессию(ничего не возвращает)

4. Cоздаём дополнительный action (для вывода каптчи)

function captchaImg(){
$this->autoRender=false;
$this->Captcha->show();
}

5. Чтобы отобразить картинку во view:

<img src="<?php echo $html->url("/controller/captchaImg")?>" alt="">

controller - это ваш контроллер, где вы подключили компоненту, сгенерировали ключь, и создали функуию отображения (можно воспользоватся route)

6. для проверки каптчи:

if($this->Captcha->check($this->data["Msg"]["captcha"])){
//Каптча верна
}

$this->data["Msg"]["captcha"] - это строка, которую вы хотите сверить с сгенерированным ключём

В принципе этого достаточно.

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

Если вы думаете что она очень проста для понимания роботами… я вас умоляю, она не на столько проста чтобы так слёту её мог понять спам бот, а если за ваш сайт возьмутся, то любая каптча будет безсильна.

ИМХО: каптча не универсальный способ защиты от спама с её помощью можно отсеит какойто процент.

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

Posted in PHP | 1 Comment »

Использование мультимедиа клавиш в Linux

Февраль 13th, 2008 by mAd

Есть у меня клавиатура, немножко мультимедиа (8 дополнительных клавиш). Захотелось мне однажды чтобы они заработали под Debian. В гноме это делается элементарно, запускаем gnome-keybinding-properties и задаём нужные клавиши под нужные действия. Но, количество событий ограничено, да и выбрать приложение нельзя, работает только в gnome, если запущен фильм, то горячими клавишами звук не изменишь… в общем, неудобно, тем более, я часто меняю gnome на xfce.

Read the rest of this entry »

Posted in Debian | 1 Comment »

Получение выделенного текста

Январь 16th, 2008 by mAd

Столкнулся с такой задачей, нужно получить координаты выделенного текста в textarea.

В Mozilla всё проще простого selectionStart и selectionEnd. В IE это, как и ожидалось, не работает. Но нужна кросбраузерность.

Порыскав немного по нету, нашёл подходящий код (свой собственный мне не понравился).

function Selection(textareaElement) {
this.element = textareaElement;
}
Selection.prototype.create = function() {
if (document.selection != null && this.element.selectionStart == null) {
return this._ieGetSelection();
} else {
return this._mozillaGetSelection();
}
}
Selection.prototype._mozillaGetSelection = function() {
return {
start: this.element.selectionStart,
end: this.element.selectionEnd
};
}
Selection.prototype._ieGetSelection = function() {
this.element.focus();
var range = document.selection.createRange();
var bookmark = range.getBookmark();
var contents = this.element.value;
var originalContents = contents;
var marker = this._createSelectionMarker();
while(contents.indexOf(marker) != -1) {
marker = this._createSelectionMarker();
}
var parent = range.parentElement();
if (parent == null || parent.type != "textarea") {
    return { start: 0, end: 0 };
}
range.text = marker + range.text + marker;
contents = this.element.value;
var result = {};
result.start = contents.indexOf(marker);
contents = contents.replace(marker, "");
result.end = contents.indexOf(marker);
this.element.value = originalContents;
range.moveToBookmark(bookmark);
range.select();
return result;
}
Selection.prototype._createSelectionMarker = function() {
return "###SM_" + Math.random() + "###";
}

Юзается очень просто:


var selection = new Selection(document.getElementById("textArea"));
var sel = selection.create();
sel.start;// начало выделения
sel.end;//конец выделения

Работает в IE 6 Mozilla 2.x Oper9.2 и выше. Как с остальными, не проверял.

Да, ещё, следите за тем чтобы при event не терялось выделение (например <span onclick=”sel()”>click<span> в IE начало и конец выделения будут одинаковы);

PS. код класса не мой. я его нашёл в инете, к сажеленью адрес ресурса и контакты автора не сохранились :(

Posted in javascript | 2 Comments »

Google переводчик

Январь 3rd, 2008 by mAd

Наверно не мне одному порой приходится на лету переводить фразы с разных языков, выучить которые в обозримом будущем не представляется возможным. Как вариант можно пользоваться online переводчиками. Но есть решение получше в официальном блоге google talk наткнулся на замечательнейшую заметку о замечательной фиче googleTalk.

Суть такова, добавляете себе в контакт бота отправляете ему фразу и он пересылает вам перевод. На мой взгляд очень удобно.

Под каждую связку языков, разные боты: ar2en, de2en, de2fr, el2en, en2ar, en2de, en2el, en2es, en2fr, en2it, en2ja, en2ko, en2nl, en2ru, en2zh, es2en, fr2de, fr2en, it2en, ja2en, ko2en, nl2en, ru2en, zh2en.

Имя бота формируется следующим образом: [from language]2[to language]@bot.talk.google.com. Например en2de@bot.talk.google.com бот переводит фразу с английского на немецкий.

P.S. Первый пост.

Posted in Google | 2 Comments »

rss RSS