Срочно: Линукс больше не пингвин

С благословения Линуса Торвальдса ядро линукса сменит свой привычный логотип (изображение пингвина) на нового зверька по кличке Tuz (он же тасманский дьявол). Новый логотип будет распространяться вместе с исходниками ядра версии 2.6.29. Изображение было создано в идеологически правильном векторном редакторе Inkscape товарищами Andrew McGown и Josh Bush.


Читать полностью »

Установка APC

APC (Alternative PHP Caching – это Альтернативный ПХП Кешер, руководство по использованию на английском языке). Входит в число трех наиболее популярных способов кеширования опкодов для выполненных php скриптов. Его ближайшими конкурентами являются XCache и eAccelerator. О последнем я уже писал недавно на этом блоге, а статья об XCache, который имеет несколько очень существенных преимуществ перед конкурентами, будет опубликована здесь в ближайшее время. Короче говоря, APC это еще один способ повысить быстродействие вашего сайта в том случае если он расположен на вашем сервере, вы являетесь админом своего хостинга и вас волнуют вопросы быстродействия размещенных на нем сайтов…

Читать полностью »

Умом Яндекс не понять, аршином общим не измерить…

В очередной раз убеждаюсь что количество конкурентов у Гугла вот-вот уменьшится на одного… Яндекс с каждым днем все более явно сливает в пользу более крупного конкурента… Мало того что он индексирует более-менее только зону .ru, но даже и эту, вроде бы “родную” для себя зону, которую, как последний рубеж, ни в коем случае нельзя уступать конкуренту он индексирует плохо. О том как Яндекс индексирует даже русскоязычные сайты в остальных зонах я лучше вообще промолчу.

Вышенаписанное уже давно не секрет для вебмастеров которые работают в Рунете, но на написание сегодняшнего поста меня натолкнула такая замеченная при просмотре логов странность:

Читать полностью »

Регистрация в каталогах. Мой опыт.

Честно говоря, в течении своей работы в области веб-программирования и поисковой оптимизации я никогда всерьез не воспринимал регистрацию в каталогах. Я был уверен что в поисковых системах работают не самые глупые люди на планете и им будет совсем не трудно отличить каталог от обычного сайта. А предполагать что ценность ссылки поставленную в тексте обычного сайта на тематический близкий ресурс может равняться ссылке из каталога – это уже совсем абсурдно. Но почитав на сеоблогах рекомендации обязательно гонять каждый новый сайт по каталогам “для наращивания ссылочной массы” и регистрировать его в поисковиках – “для более быстрой индексации” я засомневался. Для того чтобы установить истину и расставить точки над i я поставил для себя небольшой эксперимент.

Читать полностью »

Сравнение сложности изучения разных языков

Сегодня попался на глаза еще один простой, но интересный способ сравнения сложности изучения того или иного языка программирования – по количеству управляющих конструкций и операторов языка. Интересно что, если оценивать языки только по этому параметру, то Java и PHP окажутся примерно одинаковой сложности (по 53 конструкции).

Читать полностью »

PHP и строки в UTF8

Судя по количеству жалоб на форумах в эпоху победного шествия Юникода по планете многих начинающих php-программистов интересуют вопросы как работать в php со строками в кодировке utf8. Что ж, добавлю и я в эту тему свои пять копеек…

Итак, в сегодняшней статье вы прочитаете как правильно работать со строками utf8 не перекодируя их в другие кодировки и не устанавливая никаких дополнительных php-библиотек или фреймворков и покажу это все на примере функции ucfirst(), которая будет переводить первый символ строки в верхний регистр.

Читать полностью »

Переклад Virtuemart-1.1.3

Под катом выложен архив, который содержит языковые файлы для популярного joomla-компонента создания интернет-магазина Virtuemart версии 1.1.3. Архив содержит перевод сообщений интерфейсной и административной части на украинский и русский языки.

Перевод украинской части все еще не окончен. Если вы заметите ошибку, неточность или просто опечатку – пишите в комментарии. Обязательно исправлю.

Читать полностью »

Перенос почты домена на Gmail

Решился все-таки перенести обработку почты с одного из своих основных доменов на Gmail. Процедура переноса прошла гладко. Все что потребовалось – заполнить небольшую форму регистрации и перенастроить DNS. Добавилось несколько MX-записей указывающих на новые почтовые сервера. И одна запись CNAME – кроме IMAP, хотелось иметь возможность иногда использовать веб-интерфейс по адресу http://webmail.mysite.com.

Первые впечатления только положительные. Заработало все сразу, несмотря на предупреждение о том, что на подтверждение домена могут потребоваться недели. Я сразу перенастроил DNS и после этого мне поверили. ;)

Теперь радуюсь – есть все преимущества почты на gmail.com + прием/отправка почты для своего домена.
Ну и видео в тему :)



Как проверить ТИЦ и PR из PHP

Недавно столкнулся с задачей автоматизированной проверки показателей PR и ТИЦ из скрипта на PHP. Если с яндексом все оказалось на удивление просто, то с гуглом пришлось повозиться… При запросах к гуглу нужно вычислять по специальному алгоритму контрольную сумму от адреса проверяемой страницы. Если контрольная сумма неправильная – запрос не обрабатывается…

На всякий случай, выкладываю проверенные на сотнях сайтов скрипты определения ТИЦ и PR на этом блоге.
Используются нижеприведенные скрипты таким образом:

//получить значение PageRank
$google = new GooglePR;
$googlepr = $google->getPagerank ($url);
 
//получить значение ТИЦ
$yandex = new YandexCY;
$yandexcy = $yandex->getCY ($url);

Переменная $url должна содержать урл страницы (или сайта для ТИЦ).

//Определение ТИЦ
class YandexCY
{
  function getCY ($url)
  {
    $response = @file ("http://bar-navig.yandex.ru/u?ver=2&url=$url&show=1");
 
    for ($i=0; $i<sizeof($response); $i++)
      {
        $num_found = preg_match('/value="(\d+)"/', $response[$i], $matches);
        if ($num_found > 0) {
          return $matches[1];
        }
      }
  }
}
//Определение PR
class GooglePR {
 
function checksum ($url, $length = null, $init = 0xE6359A60) {
            if (is_null($length)) {
                $length = sizeof($url);
            }
            $a = $b = 0x9E3779B9;
            $c = $init;
            $k = 0;
            $len = $length;
            while ($len >= 12) {
                $a += ($url[$k + 0] + ($url[$k + 1] << 8) + ($url[$k + 2] << 16) + ($url[$k +3] << 24));
                $b += ($url[$k + 4] + ($url[$k + 5] << 8) + ($url[$k + 6] << 16) + ($url[$k +7] << 24));
                $c += ($url[$k + 8] + ($url[$k + 9] << 8) + ($url[$k + 10] << 16) + ($url[$k +11] << 24));
                $mix = $this->mix($a, $b, $c);
                $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
                $k += 12;
                $len -= 12;
            }
            $c += $length;
            switch ($len) {
                case 11: $c += ($url[$k + 10] << 24);
                case 10: $c += ($url[$k + 9] << 16);
                case 9 : $c += ($url[$k + 8] << 8);
                case 8 : $b += ($url[$k + 7] << 24);
                case 7 : $b += ($url[$k + 6] << 16);
                case 6 : $b += ($url[$k + 5] << 8);
                case 5 : $b += ($url[$k + 4]);
                case 4 : $a += ($url[$k + 3] << 24);
                case 3 : $a += ($url[$k + 2] << 16);
                case 2 : $a += ($url[$k + 1] << 8);
                case 1 : $a += ($url[$k + 0]);
            }
            $mix = $this->mix($a, $b, $c);
            return $mix[2];
        }
 
        function mix ($a, $b, $c) {
            $a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 13)));
            $b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 8));
            $c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 13)));
            $a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 12)));
            $b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 16));
            $c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 5)));
            $a -= $b; $a -= $c; $this->to_int_32($a); $a = (int)($a ^ ($this->zero_fill($c, 3)));
            $b -= $c; $b -= $a; $this->to_int_32($b); $b = (int)($b ^ ($a << 10));
            $c -= $a; $c -= $b; $this->to_int_32($c); $c = (int)($c ^ ($this->zero_fill($b, 15)));
            return array($a,$b,$c);
        }
 
        function zero_fill ($a, $b) {
            $z = hexdec(80000000);
            if ($z & $a) {
                $a = ($a >> 1);
                $a &= (~$z);
                $a |= 0x40000000;
                $a = ($a >> ($b - 1));
            } else {
                $a = ($a >> $b);
            }
            return $a;
        }
 
        function to_int_32 (&$x) {
            $z = hexdec(80000000);
            $y = (int) $x;
            if($y ==- $z && $x <- $z){
                $y = (int) ((-1) * $x);
                $y = (-1) * $y;
            }
            $x = $y;
        }
 
function getPagerank ($full_url) {
 
        $ch_url = "info:$full_url";
 
            $checksum = $this->checksum($this->strord($ch_url));
 
            $url = "http://www.google.com/search?client=navclient-auto&ch=6$checksum&features=Rank&q=$ch_url";
 
            $data = @file_get_contents($url);
 
            // Data is 'Rank_1:1:3', page rank is the last digit or '3'
            preg_match('#Rank_[0-9]:[0-9]:([0-9]+){1,}#si', $data, $p);
            $value = @($p[1]) ? $p[1] : 0;
            return $value;
        }
 
        function strord ($string) {
            for($i = 0; $i < strlen($string); $i++) {
                $result[$i] = ord($string{$i});
            }
            return $result;
        }
}

MySQL, PHP и кодировки. Ultimate guide.

Всё что вы когда-либо хотели знать про mysql, php и кодировки, но боялись спросить! Почему кириллица на сайте отображается вопросами? Как правильно настроить сервер mysql для работы с кириллицей? Как поменять кодировку в mysql? Как изменить кодировку в скриптах php? Какую выбрать кодировку? Как сконвертировать базу данных из одной кодировки в другую? Эти и многие подобные вопросы с завидным упорством снова и снова поднимаются на различных форумах уже который год. В этом посте я постарался рассказать что нужно делать чтобы такие проблемы не возникали и дать наиболее эффективные советы на тот случай если они все-таки возникнут. Если вы не найдете ответ на свой вопрос здесь – напишите мне и я обязательно дополню этот текст с учетом вашего случая ;)

Читать полностью »