Рабочие будни

Архивы

Archive for the ‘Опыт’ Category

Разбор ломаной на мелкие отрезки

Среда, августа 12, 2009

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

private  ArrayList breakLines (ArrayList aV) //на входе массив координат
{

int snap=200; //требуемое количество отрезков на выходе
ArrayList tPixel = new ArrayList (); //новый массив координат для возврата
ArrayList aPixel = new ArrayList (); //временный массив координат

Point obj1 = new Point ();
int b=0;
foreach (Point obj in aV)
{
if (b != 0)
{
float x1 = obj1.X;
float y1 = obj1.Y;
float x2 = obj.X;
float y2 = obj.Y;
//Алгоритм DDA-линии
int L = (int) Math.Max (Math.Abs (x2 — x1), Math.Abs (y2 — y1));
float dX = (x2 — x1) / L;
float dY = (y2 — y1) / L;
aPixel.Add (new Point ((int) x1, (int) y1)); //Начальную точку в массив

for (int i = 0; i < L; i++)
{
x1 = (x1 + dX);
y1 = (y1 + dY);
aPixel.Add (new Point ((int) x1,(int) y1)); //Следующую точку в массив
}
//aPixel.Add (new Point ((int) x2, (int) y2)); // Можно раскомментировать если требуется дублирование каждой последней точки в отрезке
}
obj1 = obj;
b++;
}
for (int i=0;i<snap;i++)   tPixel.Add (aPixel[(int)(aPixel.Count*i/snap)]);
return tPixel;
}

Такая вот теорема для критики. Если есть кому что добавить, то вэлком.

Вычисляем длину линии по координатам

Понедельник, августа 3, 2009

Этот и последующие статьи будут из серии простейших операций с 2d графикой. Получается так, что с частотой в год или два,  приходится выполнять одинаковые задачи с подобными незатейливыми алгоритмами. И постоянно приходится вспоминать одни и те же действия. Статьи будут краткие  и простые. Текущий заказчик захотел исполнение на C# , следовательно код будет именно на нём.

private Double length (Double _x1, Double _y1, Double _x2, Double _y2) {
return Math.Sqrt (Math.Pow (_x2 — _x1, 2) + Math.Pow (_y2 — _y1, 2));
}

И да, скажете почему нет подсветки кода? Мне она не нужна.

WordPress plugin WP2Twitter

Четверг, января 15, 2009

Представляю вашему вниманию плагин трансляции анонсов  записей из WordPress в Twitter. За основу был взят плагин Twitter updater от Victoria Chan. Из-за того, что оригинальный плагин не работал, как требуется, пришлось его допилить. Чем и делюсь со всеми.

Установка:
1.    Скачайте плагин wp2twitter (113)
2.    Распакуйте папку с плагином в папку плагинов WordPress (/wp-content/plugins/)
3.    Активируйте плагин в админке плагинов.
4.    Двигайтесь  в панель инструментов и выберите WP2Twitter
5.    Настройте параметры под себя и укажите свои данные от твиттера

Сегодня Яндекс вычудил

Среда, января 14, 2009

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

То же самое произошло и со мной сегодня. Были обращения пользователей, что яндекс не открывается. Что характерно жалоб то не было до этого. Отложив данную проблему на потом, потому как есть более глобальные проблемы, нежели не открытие одной из многих поисковых систем. И вот уже под вечер, разобравшись с основной работой, решил взглянуть, что же там такое происходит. Пошел по пути пользователя и обнаружил что, проблем то нет. Но дыма без огня не бывает, полез изучать логи и обнаружил интересную штуку. Буквально сегодня в строке запроса яндекса добавилась новая строка stparhome=banner. И уже под вечер эта строка из запроса заменилась на stparhome=byes.

Фраза banner естественно попала под действие баннерорезки. Каким местом думал яндекс при добавлении этой фразы? Небось опомнились когда количество поисковых запросов упало на неопределенный процент?

Little Spam Filter

Понедельник, декабря 15, 2008

Написал для WordPress маленький спам фильтр. Работает только при наличии на сайте кода Google Analitics. Google Analitics создаёт кукесы у пользователя, а плагин проверят их наличие. Если кукесы от Google Analitics обнаружены то комментатор считается человеком, если нет то спамом. Спам, сразу метится как спам. Распознаёт 100%, если у комментатора не отключен javascript, поддержка кукесов и сайт Google Analitics не блокируется.
И так, тестируем...
Little Spam Filter (120)

Мой выбор Feedreader

Среда, декабря 3, 2008

Было время когда я пользовался Оперой для чтения RSS каналов. Всё устраивало, пока количество каналов не увеличилось на столько, что в Опере стало невозможно работать. Невозможно работать – это постоянные тормоза в процессе работы (она фоном пытается прочитать каналы, и отодвигает сёрфинг на второй план), при запуске Оперы, при выключении Оперы.

Пришлось переходить на Google Reader (далее GR). Опять же поработав с GR несколько месяцев, у меня очередная Опера перестала отображать новости из него. Сначала подумал, что меня тупо заблокировал GR за слишком большое количество новостей, но открыв GR в IE я был удивлён тем, что всё на месте и никто никого не блокировал.

Принял решение пересесть с Оперы на Firefox (далее FF). И знаете, я ничуть не жалею. Весь функционал Оперы компенсируется массой плагинов для FF. Теперь меня всё устраивало, кроме того, что не имея доступа к сети я не могу воспользоваться теми RSS данными на которые я подписан и которые я уже прочитал. Бывает что требуется что то найти в этом потоке информации. Попробовав несколько RSS читалок, остановился на Feedreader (далее FR).

В GR сделал экспорт RSS лент в OPML формат, а в FR импортировал его же. Теперь мои подписки хранятся локально, и в любой момент я могу их прочитать или перечитать. Приятно неожиданностью было обнаружить в FR возможность создания «умной новостной ленты». Она позволяет группировать новости по нужным вам ключевым словам. Например, можно отобрать новости с фразой «LINUX» с разных RSS каналов в отдельную группу и с легкостью читать ту тематику, которая в интересна вам в данный момент, не говоря уже о том, что просто прочитать все новости одной тематики.

Мониторинг множества RSS каналов на предмет новых новостей естественно отнимает ресурсы ПК и генерирует трафик, но ведь ни что не мешает нам оформить подписки в GR и читать их через FR уже на ПК, а далее группировать по нужным критериям.

Такой вот нехитрый метод чтения RSS каналов я выбрал.

Лечим связку WordPress&Godaddy&отправка почты

Понедельник, ноября 17, 2008

Все правки делались в class-phpmailer.php
Не люблю я править код WordPress, но если уже ничего не помогает, то приходится вмешиваться. Для начала обязательно указать ваш реально существующий ящик в переменную
var $Sender = «blablabla@bla.com»;

Нужно это для хитро настроенных почтовых серверов получателей, которые проверяют существует ли отправитель на самом деле. Типа защита от спама. Если не указать отправителя, то при отправке письма сервер хостера сам подставит какой ему вздумается ящик и сервер получателя такое письмо не пропустит. Пример адреса если мы его не задаём: Return-Path:val34334@p3slh209.shr.phx3.secureserver.net. Естественно такого почтового адреса не существует.

Далее обнаружен глюк у хостинга godaddy.com
В соответствии с RFC 2822 WordPress разбивает тему письма на фрагменты не превышающие 78байт. Но опытным путём выяснилось, что если фрагментов больше чем 1, то godaddy делает вид что письмо ушло, а сам его херит в неизвестном направлении.
Для этого пришлось обрезать сообщение subject до длины, не превышающей 1 фрагмента. Тупо 35байт указал наугад. Да тема теперь не всегда информативна, но что делать, лучше пусть так чем никак. Для обрезания темы опять же вставляем следующий код чуть выше функции function EncodeHeader:

function truncate_bytes($string, $len) {
if (strlen($string) <= $len) {
return $string;
}
if ((ord($string[$len]) < 0×80) || (ord($string[$len]) >= 0xC0)) {
return substr($string, 0, $len);
}
while (--$len >= 0 &amp;&amp; ord($string[$len]) >= 0×80 &amp;&amp; ord($string[$len]) < 0xC0) {};
return substr($string, 0, $len);
}

//Далее находим строчку:
$x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
//И вставляем перед ней:
$str = $this->truncate_bytes($str, 35);

На этом всё.