Feb 21

Первично перенос данных был сделан не совсем правильно, просто были взяты папки(DB) скопированы в соответствующую директорию где новый сервер хранил свои базы данных и все.

По крайней мере на сайте все показывалось нормально, но были проблемы с правильной сортировкой по строковым полям. Причиной этого стало наследие кодировок latin от 3 версии, там все работало прекрасно и сортировка была правильной. Еще вроде бы в phpMyAdmin показавались кракозябры вместо русских букв. Но я phpMyAdmin ом особо не пользовался, мне больше нравился SQLyog. Через некоторое время обновил версию SQLyog-а, и тут началось. Русские буквы кракозябрами, insert и update прекращали данные в вопросики.

Если insert и update делать из php то все нормально.

Ситуация дозрела, нужно что то делать с кодировками. Если в таблице изменить кодировку строки из latin на cp1251 тогда сервак конвертит строку в вопросики, на эти грабли я уже наступал. Изучил содержимое файлов *.frm *.myd *.myi  выяснил что в *.myd лежат данные таблицы в кодировке cp1251 (она же windows-1251). Сделал копию всех файлов. Потом программой SQLyog поменял кодировку строковых полей во всех таблицах(в SQLyog выпадающее меню на таблице - команда AlterTable) . Естественно все русские строчки стали вопросиками. Переписал все файлы *.myd из копии. Перезапустил сервер MySQL, ура все по русски и в правильной кодировке, и везде.

В конце хочу сказать что кодировка в MySQL много где зашита:

  • Поля таблицы (AlterTable)
  • Свойство таблицы (Alter Table - Advanced Properties)
  • Свойство базы данных (Alter DataBase)

Итого: везде где только можно было выставил кодировку cp1251, но запрос

show variables where Variable_name like ‘%char%’;

Вернул следующее

query result

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/local/mysql/share/mysql/charsets/

Пусть не пугает наличие utf8, так и должно быть.

Теги: ,

Feb 07

Максим Спиридонов - руководитель ПЦ «Ройбер» не только учит в своем видео семинаре как это делать, но и интересным образом продвигает это в массы. На своей странице http://spiridonov.ru/post/279 он предлагает блоггерам подзаработать от 100 до 500 рублей всего лишь за сообщение на страницах их блогов, плюс бонусом предлагает сам видео семинар. Продюсер проектов: Социальные закладки “Memori.ru”; Подкаст-терминал “PodFM.ru”; Интернет-журнал “ШколаЖизни.ру” и др.  за небольшие в общем то деньги, получает:

1) кучу пожизненных бэков с пропиаренных (ака посещаемых) блогов

2) неплохую известность

3) Насчет бонуса, посмотрим конечно. Скорее всего он очень хорошего качества. Тут скорее всего идет акция по поддержанию других видео семинаров или другой продукции

Вот рекламный ролик

http://www.youtube.com/watch?v=nxlKoHXmeCE

Главные темы фильма:

  • Исследование рынка: поиск ниши и идеи для стартапа;
  • Написание концепции, бизнес-плана, технического задания и другой проектной и финансовой документации;
  • Пути поиска инвестиций в принципы взаимодействия с инвесторами;
  • Организация работ по производству сайта;
  • Программный код «с нуля» или CMS? Выбор CMS;
  • Специфика работы с удаленными исполнителями;
  • Документальное оформление: создание фирмы, договора, патенты;
  • Важнейшее в поисковой оптимизации;
  • Формирование «ауры» и стиля проекта;
  • Интерфейсы и дизайн сайта;
  • Выбор оптимального времени выхода;
  • Запуск и первичный маркетинг;
  • Стратегия «высокого старта»;
  • Способы рекламирования и популяризации проекта;
  • Методы получения обратной связи;
  • Формирование круга лояльных пользователей;
  • Приемы удержания посетителя на сайте;
  • Систематизация бизнес-процессов и процессов поддержки.

Теги:

Feb 05

Предыдущий пост был про Google PR, настало время разобраться с функцией для получения Яндекс тИЦ. Тут все очень просто, панель от яндекса показывает тиц страницы. Где то же она берет циферку. Отлавливаем запрос, который шлет панель яндекса.

http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://www.e64f.ru

В ответ прилетает xml

<urlinfo>
<url domain=”www.e64f.ru”>/</url>
<tcy rang=”2″ value=”10″/>
<topics>
</topics>
<textinfo>
</textinfo>
</urlinfo>

Функции достаточно посылать запрос подставляя в него нужный урл, ответный xml код разбирать и возвращать значение value тега tcy. Когда программировал, хотел разобрать xml какой нибудь библиотекой, но у меня в денвере таких не оказалось. Так что, извините что сделал вытаскивание тИЦа строковыми функциями, зато работать это будет везде.

Файл yandex_cy.php

<?php
function get_yandex_cy($url)
{
	$xml = file_get_contents('http://bar-navig.yandex.ru/u?ver=2&show=32&url='.$url);
 
	$pos = strpos($xml, 'value="');
 
	$value = substr($xml, $pos+strlen('value="'), 10); 
	$value = substr($value, 0, strpos($value, '"'));
 
	return $value;	
}?>

Файл test.php

1
2
3
4
<?php
include_once("yandex_cy.php");
echo get_yandex_cy("http://www.e64f.ru");
?>

Теги:

Feb 05

В сети интернет достаточно много ресурсов? которые предоставляют возможность получить значение PR. Есть даже дополнения к браузеру FireFox? которые позволяют видеть PR, например для открытого сайта или для найденных ссылок на странице поиска гугль. Все это хорошо, но иногда нужно получать пэйдж ранк программно в своих скриптах.

Официального сервиса по получению PR как бы нет. Но умельцы сами пишут библиотеки для получения PR используя запрос аналогичный тому, который посылает панель Гугла для браузера. У меня давно была такая библиотека, и … сейчас она не работает. ))

Сейчас гугл немного защитили процесс получения ПР, добавили checksum $url = “http://www.google.com/search?client=navclient-auto&ch=6$checksum&features=Rank&q=$url”;
вот такой запрос вернет ПР.

Немного погуглив нашел много не работающих библиотек по получению google pr, также нашел одну работающую.

Файл google_pr.php

<?php
function get_pagerank($url) {
    $data = new pagerank($url);
    return($data->getPageRank());
}
 
    class pagerank {
 
        var $url;
 
        function pagerank ($url) {
            set_time_limit(0);
            $this->url = parse_url('http://' . ereg_replace('^http://', '', $url));
            $this->url['full'] = 'http://' . ereg_replace('^http://', '', $url);
        }
 
        function getPage ($url) {
            if (function_exists('curl_init')) {
                $ch = curl_init($url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
                curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/search?hl=en&q=google&btnG=Google+Search');
                return curl_exec($ch);
            } else {
                return file_get_contents($url);
            }
        }
 
        function getPagerank () {
            $url = 'info:' . $this->url['host'];
            $checksum = $this->checksum($this->strord($url));
            $url = "http://www.google.com/search?client=navclient-auto&ch=6$checksum&features=Rank&q=$url";
            $data = $this->getPage($url);
            preg_match('#Rank_[0-9]:[0-9]:([0-9]+){1,}#si', $data, $p);
            $value = ($p[1]) ? $p[1] : 0;
            return $value;
        }
 
        function toInt ($string) {
            return preg_replace('#[^0-9]#si', '', $string);
        }
 
        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 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 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 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 strord ($string) {
            for($i = 0; $i < strlen($string); $i++) {
                $result[$i] = ord($string{$i});
            }
            return $result;
        }
 
    }

Файл test.php

<?php
include("google_pr.php");
echo get_pagerank("e64f.ru");
?>

Feb 03

Не знаю как давно появилось, но я заметил недавно, что в maps.google.com вверху бегунка масштаба находится изображение человечка. Если вы находитесь на территории США, перетащите мышкой этого человечка на какую нибудь более менее главную дорогу. Вам тут же покажут фото того места. Но это не все тут есть некий элемент присутствия, ВЫ МОЖЕТЕ ПОВАРАЧИВАТЬСЯ, ОСМАТРИВАТЬ ВСЕ ВОКРУГ, ВЫ МОЖЕТЕ ДВИГАТЬСЯ ПО ДОРОГЕ - ВПЕРЕД НАЗАД. Интернет трафик это дело конечно кушает, диалап отдыхает.

Вобщем, если хотите так сказать поездить например по окрестностям Сандиего, гугл вам поможет