Материалы за Сентябрь, 2009

Скачать все утилиты в одном архиве: redoublers

Сегодня выложу несколько утилит, не так чтобы сильно оригинальных, но мне лично сэкономивших массу времени и нервов. Все они связаны с работой со списками, с задачами типа «отобрать строки из файла 1, которых нет в файле 2″, «убрать дубли доменов» и подобными.

Что это такое. Собственно, я не претендую на оригинальность или какое-то «ноу-хау» в этих тривиальных задачах. Мало того, есть программа Text Pipe Pro, которая умеет делать все что мои утилиты и еще много-много чего. Мало того, таких утилит полно. НО – мне было влом как-то искать соответствующие програмки, писать их недолго… Ну и конечно, за 10 лет профессионального программирования я научился составлять нормальные алгоритмы, так что скорость работы у утилит, мне кажется, на высоте.

В общем первая утилита – обычный раздубливатель. Из «фишек»:

  • Можно сравнение проводить не на основании всей строки, а на основании доменов. То есть если строки – это www-адреса, ftp или email, то утилитка вычленит домены, и будет сравнивать их, ну а в результат конечно будут записаны не домены, а сами строки полностью.
  • Штатными средствами можно выбрать несколько файлов, утилита прочтет их все и сделает уникальный список на основании всех файлов. Удобно, когда есть старая база и надо добавить одну или несколько новых, прочекивая на дубли. Кстати, вернемся к режиму сравнения по доменам. Если выбрать сначала старую базу, а потом новые, то СНАЧАЛА в результат добавятся значения старой базы, а новые URL с таким же доменом не добавятся. Ну и наоборот, то есть какой файл первый выбираешь – имеет значение.
  • Естественно, программа рассчитана на многомиллонные списки. Скажем 15 миллионов (файл около 400 Mb) я ей раздубливал.

Вот скрин:

redoubler

Утилита бесплатная, текущая версия 1.00, думаю что и последняя ;)

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

Ну и еще парочку утилит, которые делают следующее. Первая утилита отбирает в результат из файла №1 только те строки, которые есть в файле  №2. Вторая – удаляет из файла №1 строки, которые есть в файле №2. Типичные задачи – чекинг по блэк-листу, или выборка общих значений из двух баз.

Выглядят вот так, как близницы :)

file1file2file1file2-2

Обе программы бесплатные.

Качать отсюда: Первая и вторая.

Все утилиты в одном архиве: redoublers



Довольно давно столкнулся с интересной задачей: необходимо было управлять ссылками на свои ресурсы, проставляя/добавляя/удаляя их по ftp. По некоторым причинам ( :) ), доступ к этим ftp должен был осуществляться анонимно, с сокрытием реального IP адреса. Система управления должна была работать на сервере иметь www-интерфейс. Короче, продвинутый многопоточный фрэймер, работающий через соксы.

Было это пару лет назад, программу я успешно написал и сдал. И остался для будущих проектов от нее класс работы с ftp, написанный на php. В нем нет ни одной функции пхп, начинающейся с ftp_: весь протокол ftp реализован чисто с помощью сокетов. Соответственно главный плюс – возможность работать по ftp через соксы.

Вот так выглядит использование класса:


<?php
require_once 'ftp.class.php';

// Создание объекта, через который будем управлять по ftp
$fc1 = new ftpcom();
// Можно при создании сразу указать, с каким ftp будем работать
$fc2 = new ftpcom('ftp://login:pass@domain.com');
// Можно сразу указать socks-5 прокси, например 127.0.0.1:3128
$fc3 = new ftpcom('ftp://login:pass@domain.com', '127.0.0.1:3128');

// Впрочем, можно параметры присвоить и позже:
$fc1->Host = 'domain.com';
$fc1->Port = '21'; // По умолчанию порт и так 21
$fc1->User = 'login';
$fc1->Pass = 'pass';
// Сколько секунд ждать ответа от сервера, по умолчанию 30
$fc1->ConnectTimeOut = 10;

// Коннект и логин осуществляется вот так:
// Connect без параметров подключает к domain.com, как задано
if(!$fc1->connect()) exit($fc1->Error);
$fc1->login(); // Ну и логинимся с логином и паролем, заданным выше

// Подконнектится к domain3.com, к порту 21, ждать максимум 200 секунд
if(!$fc2->connect('domain3.com', 21, 200)) exit($fc1->Error);
// При логине тоже можно задавать напрямую логин и пароль
$fc2->login('Login2', 'mysecretpass');
// Ну удобней всего конечно так:
if(!$fc3->connect() or !$fc3->login()) exit($fc3->Error);

// Остальные операции соответствуют синтаксису встроенных в пхп функций работы с ftp. Например:
$fc1->rawlist(); // Возвращает список файлов в текущей директории
$fc1->chdir('http_docs'); // поменяет текущцю директорию
// Скачает file.php с текущей директории и сохранит как file.php
$fc1->get('file.php');
// Скачает файл index.php и сохранит в temp.php.
// Режим скачивания - текстовый
$fc1->get('temp.txt', 'index.php', 'FTP_ASCII');
echo $fc1->pwd(); // Возвращает текущую директорию
// Локальный файл temp.php зальет на ftp с именем index.php
$fc1->put('temp.php', 'index.php');
// В переменной Error хранится результат последней операции
echo $fc->Error;
?>

Код класса можно скачать отсюда: ftp.class.zip



Сегодня – аналитический материал, без программ :)

Начнем пожалуй с прикола. Набирал я как-то в поисковике запрос, и вот что мне «подсказал» великий гугль:

how-to-humor

«Да уж» – подумал я, – прикольные запросы наш народ вводит. Но этот курьезный случай навел меня на одну мысль…

А теперь серьезно. Эти подсказки формируются, исходя из частоты введенных запросов за прошлый месяц. Логично? А давайте тогда сделаем так.

  1. Возьмем ВЧ-запрос, ну скажем полуторамиллионник ringtones.
  2. Добавим к нему супер-НЧ, ну скажем ringtones MyBestRTServiceDownload
  3. Сделаем лэндинг с рингтонами, и выведем в ТОП-1 по ringtones MyBestRTServiceDownload. Это несложно, так как MyBestRTServiceDownload – по условию супер-НЧ.
  4. Попросим гугля 2 милиона раз найти сочетание ringtones MyBestRTServiceDownload
  5. На следующий месяц пользователи, набирая ringtones, получат в подсказке ringtones MyBestRTServiceDownload. Часть из них нажмет на нее и попадет на выдачу, первым в которой стоит наш лэндинг.

Первый вопрос – оценка валовой прибыли. С полутора миллионов запросов в месяц считаем пусть треть вообще пользуется сервисом подсказок. Итого 500 тысяч. Из них на подсказку ткнет пусть каждый десятый. 50 тысяч. На первый результат по статистике тыкает треть юзеров – т.е. район 20 тысяч трафа в месяц – наш. Учитывая средний бид PPC по ringtones порядка 5 центов, и считая таким же конверт на нашем лэндинге (ну не хуже же чем на ППС мы его сконвертим!) – получаем $1000. Да, я сознательно несколько занизил количество тыкнувыших на подсказку – думаю их будет больше.

Второй вопрос – затраты. Вопрос мной не изучался, но тут есть мнение, что гугль в данном случае считает по кукам, а не по IP. Намек понятен?

Ну и дополнение: такого плана услугу (вывод запроса в подсказку поисковика) оказывает пару «предпринимателей» на серче, но на поток не поставлено, что кстати видно и по их ценам.

Удачной работы.



Предыстория. С введение SP2 в ОС Windows XP было принято решение ограничить количество одновременных исходящих соединений (если быть точным, то только полуоткрытых соединений, ну не будем углубляться в дебри – счас это не принципиально). Изначально идея состояла в том, чтобы огранчить скорость распространения червей. Решение достаточно сомнительное, но специалисты Microsoft посчитали его оправданным.

Итак, на текущий момент положение таково:

  • Windows XP – максимум 10 одновременных соединений
  • Windows Vista Home – максимум 5 соединений
  • Windows Vista Ultimate – максимум 25 соединений

Как Вы понимаете, для программ, активно во много потоков использующих сеть – такое ограничение является неприемлимым. В том числе и большинство моих программ буду чувствовать себя «неуютно», а то и нестабильно работать, если это ограничение не убрать.

Патч для Windows XP / Vista. Мне наиболее удобным кажется патч Half-open_limit_fix_4.1 от www.half-open.com. Вот такая небольшаяутилитка для виндовс решает проблему соединений:

half-open

Удачной работы.



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

Ну, собсно как и обещал, раз блог сделал, стало быть надо его вести. На сегодняшнюю запись решил долго не придумывать ничего нового, а так – полез на винт и посмотрел что из программ ранее не выкладывалось, и что можно без жалости отдать в паблик. Кстати программ, скриптов и других проектов на винте оказалось почти 400. Эт я типа горжусь :) . Итак:

Что это такое: Еще одна десктопная утилита. Получает ответы от сервера апача и раскладывает список URL в соответствующие файлики. Часто бывает что-нить напарсил, и перед передачей результатов в какую-нибудь сложную программу обработки (спамилку например) удобно быстренько пробежаться по списку, и те что не отвечают – сразу выкинуть.

Что умеет:

  • Задаем имя файла с исходными URL. Оптимизировано под большие размеры файлов, хоть 100 гигов.
  • Нажимаем кнопку старт/пауза. Проверяет страницы из файла-списка, и раскладывает по файликам-типам ответов. Работает на голых сокетах,  устойчивая и шустрая. Я проверял около 10 лямов URL без проблем.
  • Количество потоков выставляется в файлике settings.ini

Если вдруг кто не знает что какие ответы значат:

  • 2xx – все ОК, сервер отдает страничку (xx – любые цифры)
  • 3xx – страница перемещена, сервер отдает новый адрес
  • 4xx – страница недоступна – не существует, нет прав на просмотр, т.п.
  • 5xx – различные ошибки сервера

Внимание! По умолчанию операционная система Windows XP не позволяет держать большое количество одновременных соединений. Если у Вас XP и Вы не пропатчили систему, то производительность программы будет низкая, и при большом количестве потоков будут ноормальные странички отправляться в «Нет ответа». Как пропатчить – расскажу в следующем посте (завтра, седня влом).

>>> UPD. Вот, как и обещал: http://solutionfix.org/other/connection-limit-fix/

Скриншот. Да, вот, пожалуйста.

httpanswer

Бесплатная. Текущая версия 1.01 (она же единственная).

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