2008-10-30

strpos vs. ereg vs. preg_match

программирование, PHP

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

 

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

 
  2008-10-30

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

программирование, PHP, howto

Встала такая задача - вывести в список всех флеш роликов используемых в проекте. При этом известен только 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

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

разное, PHP, программирование, howto

Сегодня случилось удалять сообщения из 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-23

!! в JavaScript

JavaScript, программирование

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

alert(!!document.evaluate);

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

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

 

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

 
  2008-10-21

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

JavaScript, программирование

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

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

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

 

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

 
  2008-10-21

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

JavaScript, программирование

При создании проектов где требуется достаточно сложное программирование на 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! Все элементарно - из-за нестандартного повседения одного браузера разработчики вынуждены прыгать через голову, выворачиваться наизнанку, изобретать велосипед.

 

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

 
  2008-10-10

Сколько стоят веб разработчики?

разное, вебдизайн, программирование, oDesk, деньги

Тут меня спросили, сколько стоят веб-разработчики в России, - честно говоря, ну не знаю я сколько они стоят, не покупал не разу. А если серьезно, то наверно, из за самой распределенной природы веба в России веб-разработчики ничего не стоят, потому как веб-разработчики которые продают себя только в России они ни веб-разработчики ни разу. Те же разработчики которые чего-то знают и чего-то умеют, они так же в России себя не продают.

Наверно на этот вопрос ответить однозначно не получится, давайте ограничим вопрос так: сколько стоят фрилансеры работающие через популярные площадки? В качестве примера возьмем www.oDesk.com

Алгоритм работы: зайдем на oDesk - далее Find Providers -> раздел Web Development, в форме поиска выберем самый высокий рейтинг, уровень знания английского языка: 5 из 5, тип работников: фрилансеры. Десять первых результатов запишем в табличку: (цены в долларах США за час работы специалиста)

Страна 1 2 3 4 5 6 7 8 9 10 Среднее
Западная Европа - Италия, Франция, Финляндия, Германия, Швеция UK 30 22 24 21 15.60 19.50 30 13.33 16.67 38.00 23.00
Восточная Европа - Россия, Украина, Молдова 20 24 22.22 12.22 17 27 30 11.11 33.33 11.11 20.80
Восточная Азия - Филиппины, Сингапур, Китай 17.78 13.33 8.89 4.44 17.00 27.00 30.00 11.11 8.88 12.22 15.05
Южная Азия - Индия Пакистан 33.33 22.22 12.22 44.44 16.67 13.33 16.67 24.00 27.00 22.22 23.21
Северная америка: США, Канада 55.56 44.44 55.56 18.00 33.33 27.78 38.89 55.56 18.33 42.22 38.97
Латинская Америка - Уругвай, Бразилия, Мексика, Венесуэла, Аргентина 25.56 22.22 21.00 16.67 18.89 22.22 20.00 44.44 11.11 30.00 23.21
Другие страны - Израиль, Игипет, Южная Африка, Новая Зеландия, Израиль, Саудовская Аравия, ОАЭ 16.67 20.00 16.67 14.00 11.11 8.89 22.22 7.78 21.67 16.67 15.53

Сколько зарабатывают на oDesk

Как видно из таблички самые высокие цены у программистов из Северной Америки, далее в равных долях идет Южная Азия и Латинская Америка, затем с минимальным отставанием Западная Европа. Следом с заметным отрывом Восточная Европа, к коей и приписывают Россию, а замыкают хит парад Восточная Азия и т.н. другие страны (это по версии oDesk: Израиль, Игипет, Южная Африка, Новая Зеландия, Израиль, Саудовская Арания, ОАЭ)

Данное исследование не претендует на полноту, и возможно не отражает реальное положение вещей, простая математика ничего больше. Речь здесь идет о максимальных цифрах (Top-10) - средние цены гораздо ниже.

P.S. И теперь угадайте где будет лучще всего продаваться российский программист? Ответ: правильно, в Северной Америке - закон спроса и предложения, ничего личного.

 

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

 
  2008-10-03

Замечательная статья о программировании

программирование, разное

Наткнулся на замечательную статью о программировании написанную программистом который этим занимался с самого начала.

 

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

 
  2008-10-02

Zip и UnZip на PHP

программирование, PHP

Сегодня встала задача сделать поддержку компрессии и декомпрессии в программе на PHP. На первый взгляд задача простая т.к. PHP5 уже содержит методы для работы с архивами ZIP. Во первых это функции вида zip_open, zip_read. Во вторых - есть шикарный класс ZipArchive который выполнит за вас всю грязную работу.

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

Нашел два решения данной проблемы - оба в использовании библиотеки gzip.

Первое решение состоит в использовании PhpConcept Library Zip - написанная Винсентом Блаветом и распространяемая по лицензии GNU/LGPL

Второе решение нашел совершенно случайно в phpMyAdmin - если глянуть в папку /libraries/ то там можно найти два файла zip.lib.php и unzip.lib.php которые содержат классы для паковки и распаковки zip файлов соответственно.

 

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

 
  2008-09-22

OpenID

движок, программирование

Доделал вход на сайт по OpenID, дело оказалось проще чем я поначалу думал. И хотя на сайте пока реализована только клиентская часть, идея OpenID мне определенно понравилась.

Использовал библиотеку PHP OpenID Library. В целом в код особенно не погружался, но в целом сделано качественно, правда сделано для обоих версий PHP, из за чего нужно гасить ошибки STRICT, ну да будет время поправлю.

 

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

разное (194)
howto (124)
программирование (110)
гад-же-ты (76)
мысли (42)
PHP (41)
JavaScript (39)
вебмастеринг (37)
linux (29)
гондураша (28)
юмор (25)
полезное (22)
софт (17)
движок (17)
Android (16)
diy (15)
кино (14)
видео (14)
книги (14)
деньги (14)
путешествия (11)
музыка (10)
интернет (10)
беспредел (10)
занимательная физика (9)
умный дом (8)
ztools (8)
хостинг (7)
Nokia 5800 (7)
языки (7)
lifehack (6)
css (6)
вебдизайн (6)
движек (5)
apple (5)
прелоадер (5)
козлы (5)
oDesk (5)
связной (5)
arduino (5)
сказочная страна (4)
Python (4)
svn (4)
кухня (4)
занимательная юриспруденция (4)
аниме (4)
энергия (3)
рестораны (3)
synphony (3)
гаджеты (3)
software (3)
фото на документы (2)
webmastering (2)
Берлин (2)
Java (2)
Ruby on Rails (2)
bash (2)
спорт (2)
гитара (2)
programming (1)
микросервисы (1)
SEO (1)
технологии (1)
C++ (1)
наука (1)
сайты (1)
восстановить (1)
Приехал ESP32 - Cam (1)
авторское право (1)
Поиск по блогу:

Valid XHTML 1.0 Strict