2008-11-03

Одноклассники - неумейки?

Прочитал замечательный ответ Экслеру от Одноклассников когда тот раскритиковал их за жадность. Больше всего мне понравилось следующее высказывание:

Немного информации. В последние дни в системе в определенные моменты были попытки регистраций десятков ботов в секунду. Сотни тысяч ботов, по повелению своих создателей, в пиковые часы могли начать одновременно голосовать за миллионы фотографий и ходить по миллионам анкет, для привлечения к себе внимания. Заходит человек посмотреть, кто это ему оценочку поставил, а там – рекламный месседж. И все эти действия создают такую нагрузку на сервера, что Экслер с Плющевым вместе взятые не смогли бы себе такое представить.

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

Странно, почему gmail не испытывает подобных трудностей? У него аудитория гораздо шире... Специально зашел на регистрацию в одноклассниках, капча на месте, думаю вроде не должны их ломать, однако дай думаю посмотрю как капча сделана, смотрю код.... ха, оказалось капча то не на одноклассники ведет... а на http://recaptcha.net/.

Иными словами ВСЕ что они перепробывали это воспользовались бесплатным сервисом теста Тьюринга!

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

 

Коментариев: 3

 
  2008-11-02

Open Office 3.0 и DOCX

Сразу после установки Open Office 3.0 решил проверить насколько он умеет работать с docx. Оказалось что, действительно, docx он открывает, а вот сохранять docx не умеет, что очень странно для формата который Microsoft усиленно хотела сертифицировать в ISO, похоже, что так сделали намерено в рамках корпоративной политики, подождем следующих версий когда война форматов закончится.

 

Оставить комментарий

 
  2008-10-30

strpos vs. ereg vs. preg_match

Тут возник вопрос как между собой соотносится быстродействие POSIX регулярных выражений, Perl-совместимых регулярных выражений и кодирования "в лоб" с использованием обчных си-подобных str* функций. Можно долго на эту тему рассуждать, поэтому привожу тест который расставляет все по местам. Исходник здесь

 

Коментариев: 1

 
  2008-10-30

Как вывести список файлов через FTP

Встала такая задача - вывести в список всех флеш роликов используемых в проекте. При этом известен только FTP заход. Конечно, можно просмотреть все страницы сайта, посмотреть где есть ссылки на swf и записать их адреса, но это займет много времени да к тому же можно что либо пропустить. Можно воспользоваться возможностями FAR Мanager, но он не выводит результат в текстовый файл, поэтому написал вот такую программку:

<?php error_reporting(E_ALL | E_STRICT); class FtpSearch { var $server_url = ''; var $username = ''; var $password = ''; var $remote_folder = ''; var $ftp; function log($message){ print $message; } function show(){ $this->ftp = ftp_connect($this->server_url); if ($this->ftp===FALSE){ $this->log('Can not connect to FTP server'); } else { $this->log('Connected successful'); if(ftp_login($this->ftp,$this->username,$this->password)){ $this->getListOfFiles($this->remote_folder,$this->remote_folder); } else { $this->log('Login failure!'); } ftp_quit($this->ftp); $this->log('Connection closed!'); } } function getListOfFiles($folder,$filename){ flush (); set_time_limit(30); if (ereg('\.swf$',$folder)){ print $folder.'<br />'; } $c = @ftp_chdir($this->ftp,$filename); if ($c){ $list = ftp_rawlist($this->ftp,''); $files = array(); reset($list); while (list(,$row) = each($list)) { $buf=""; if ($row[0]=='d'||$row[0]=='-'){ $buf = ltrim(substr($row,55)); $files[]=$buf; } } if ($files!==FALSE){ foreach($files as $file){ if (($file!='..') and ($file!='.')){ $this->getListOfFiles($folder.'/'.$file,$file); } } } $c = ftp_chdir($this->ftp,'..'); } } } $c = new FtpSearch(); $c->show(); ?>
 

Коментариев: 4

 
  2008-10-29

Как удалить все сообщения из почтового ящика?

Сегодня случилось удалять сообщения из POP3 почтового аккаунта в коем набралось больше шести тысяч писем спама. Конечно гораздо проще убить и заново создать ящик, но это слишком просто, гораздо интереснее написать небольшую программку, которая и убьет все сообщения, тем более что здесь нашел замечательную функцию на PHP. Вот ее код:

function deleteAllMessages($server,$username,$password){ $cmd = array(); $cmd[] = "USER $username\r\n"; $cmd[] = "PASS $password\r\n"; $cmd[] = "STAT\r\n"; $cmd[] = "QUIT\r\n"; // Server is your POP3 server, ie pop3.server.com // Port is the port number ( should be 110 ) $port = 110; $fp = fsockopen($server, $port); if(!$fp) { print("Error connecting to server $server"); } else { $ret = fgets($fp, 1024); foreach($cmd as $ret) { fputs($fp,$ret); $line = fgets($fp, 1024); if($ret=="STAT\r\n") { $fields = explode(" ",$line); print 'found '.$fields[1].' massages
'; $num_mails = $fields[1]; for($i=1;$i<=$num_mails;$i++) { set_time_limit(30); fputs($fp,"DELE $i\r\n"); $line = fgets($fp, 1024); flush(); } } } fclose($fp); } }

здесь выложил работающий пример.

 

Оставить комментарий

 
  2008-10-28

Open Office 3.0

Вышла долгожданная версия Open Office 3.0 однако после инсталляции при запуске обнаружилось, что в главном окне программы отсутствуют главное меню и панели инструментов.

Может у меня дистрибутив кривой? Кто нибудь сталкивался с чем либо подобным?

P.S. А дистрибутив действительно оказался кривой, скачал заново и все получилось.

 

Коментариев: 1

 
  2008-10-25

Как отредактировать svn:ignore используя коммандную строку

svn --editor-cmd="vi" propedit svn:ignore .
 

Оставить комментарий

 
  2008-10-23

!! в JavaScript

Разглядывая чужие исходники постоянно натыкаюсь на использование конструкций вида !!(document.evaluate). Догадывался что это проверка переменной на существование, и вот теперь убедился с этом лично.

alert(!!document.evaluate);

Если выполнить указанный код в мозилле покажет true если в Explorer - покажет false, что и требовалось доказать т.к. Explorer не поддерживатет XPath.

Конечно, гораздо логичнее было сделать проверку с использованием if, но поскольку в JavaScript размер кода является решающем фактором то разработчики намеренно идут на всякого рода ухищрения чтобы сократить запись иногда даже в угоду удобочитаемости.

 

Оставить комментарий

 
  2008-10-21

JavaScript наследование

Разбирая исходники библиотеки mootolls обнаружил ссылку на блог некоего Дина Эдвардса (Dean Edwards). Дин предлагает свою версию эмуляции объектно-ориентированного программирования на JavaScript.

Основные особенности следующие: не нужно кажный раз для расширения класса писать MyClass.prototype; можно обращаться к методам базового класса из переопределенных методов (аналог super в Java); поддержка статических методов свойств; не используются глобальные функции для создания цепочек прототипов; не изменяется Object.prototype.

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

 

Оставить комментарий

 
  2008-10-21

jQuery, Prototype - Исправляем родовые травмы браузеров

При создании проектов где требуется достаточно сложное программирование на JavaScript нередко начинаешь задумываться над использованием какой нибудь библиотеки для облегчения кодирования. В частности, к числу таких библиотек принадлежат jQuery и Prototype.

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

Однако, если задуматься над тем что предоставляют эти библиотеки такого без чего совершенно нельзя обойтись и раде чего мы готовы пожертвовать размером приложений - это поддержка XPath, лучшая кроссбраузерная совместимость, разный sugar типа анимации, ajax утилит и т.п.

Однако странная вещь обе эти библиотеки реализованы прямо скажем довольно своеобразно - jQuery - для обеспечения кроссбраузерности оборачивает все объекты с которыми работает в собственный объект jQuery через алиаc $. в результате код выглядит примерно вот так:

$(document).ready(function(){ $('.deletelink').click(function(){ if (confirm('Are you sure to delete this blog?')){ return true; } return false; }); });

Prototype напротив использует вызовы типа $('id_of_element') для вызова элемента по его ID при этом "расширяя" объект дополнительными методами.

Нужно ли говорить что оба подхода не способствуют эффективности. Зачем так сделано? Почему все так странно? Оказывается ответ прост! Internet Explorer и Safary не поддерживает переопределение методов HTMLElement.prototype! Все элементарно - из-за нестандартного повседения одного браузера разработчики вынуждены прыгать через голову, выворачиваться наизнанку, изобретать велосипед.

 

Оставить комментарий