Home

Реклама

[LJ2ME] Уехал на море!

  • 14 Июл, 2009 at 9:26 PM
У меня начался отпуск , товарищи, и я уехал на море в Адлер и Сочи. О своих передвижениях пишу в твиттер.
http://twitter.com/gv0zdik

SEO и ModX

  • 2 Июл, 2009 at 12:33 PM
Сегодня натягивал макет дизайна на движек Modx и заметил, что в большинстве стандартных шаблонов отсутствуют META теги keywords и description. А в теге title используется стоп символ "|" т.е. титл выглядит как "Название сайта | Название страницы" - это не есть хорошо. А мы все хотим что бы сайт хорошо индексировался, так что исправляем в шаблонах титл и добавляем мета теги таким образом.

<title>[*pagetitle*]</title>
<meta name="description" content="[*description*]" />
<meta name="keywords" content="[*introtext*]" />


Теперь при создании документа Заголовок будет титлом , Аннотация (введение) будет вставляться в тег keywords , а описание в тег description. Вот так
seo,  modx, description, keywords
Я в итоге нашел классного дизайнера для того, что бы работать в команде и того нас уже трое- я,дизайнер и копирайтер. В скором будущем нужен будет ещё и СЕОшник грамотный. В данный момент все занимаемся созданием сайта и организацией работы ,  как все заработает обязательно похвастаюсь.
Моя жжшчка за предыдущий пост заработала первые три бакса, злоупотреблять не собираюсь

Рекламный пост

  • 27 Май, 2009 at 9:27 AM
Аналитический портал «CMS Magazine» подвел итоги первого ежеквартального опроса среди профессиональных участников рынка веб-разработок (http://research.cmsmagazine.ru).

В первом опросе приняло участие 227 веб-студий, т. е. около 16% от общего числа компаний, зарегистрированных на проекте «CMS Magazine». Топ-менеджерам веб-студий было задано 12 вопросов. Формат ответов давал возможность рассказать о ситуации в 2008-м году, в 1-м квартале 2009-го и сделать прогноз на 2-й квартал этого года.

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

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

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

Среди принявших участие в опросе и оставивших комментарии, такие компании, как: «Actis Systems», «Articul Media», «DEFA Interaktiv», «Dot», «X-Project», «Grape», «Аист», «Атилект», «Бизнес Реклама» и многие другие компании.
стоимость создания сайта

Для удобства, редакция «CMS Magazine» зарегистрировала еще один домен: http://www.webindicator.ru/, который является "зеркалом" инструмента аналитики.

[LJ2ME] Пробный пост lj2me

  • 26 Май, 2009 at 11:04 PM
Сегодня на свой телефон nokia e51 поставил клиент для жж под названием lj2me, поэтому и пишу я этот пост, дабы попробывать. На самом деле был немного огорчен в плане функционала, кроме того как просто писать в жж , клиент больше ничего не умеет. Т.к. других подобных приложений под 9 симбиан не нашел рад и этому, в принципе с написанием постов справляется на 100%. Сайт разработчиков и ссылка на скачку последний версии.

Интернет веб-студия

  • 22 Мар, 2009 at 12:37 AM
Решил в интернете развернуть веб-студию , принимать заказы на создание и продвижение сайтов.  В плане программирования проблем никаких нет , есть я и ещё один человек. Все что нужно наверстаем и подвесим на любую CMS систему или свою напишем, в зависимости от бюджета. С продвижением тоже особых трудностей нет , хотя в дальнейшем и сеошник грамотный нужен будет. В данный момент нужен ответственный дизайнер или даже несколько дизайнеров , на которых можно положиться.  Если такие имеются и готовы начать работать вместе , отпишитесь в комментах или личку. Приблизительные расценки на дизайн одной странички , от 7000 - 15000 р. в зависимости от количества элементов , которые дизайнеру предстоит нарисовать самому.
Т.е. страницы наподобие этих
http://www.tehprom.ru/
http://www.skportal.ru/
Будут оцениваться явно больше 12 тыр ибо , на них много изображений нарисованных дизайнером с нуля или лихо обработынных фотографий, ну то есть видно что человек заморочился )) Так же хотелось, что бы этот же дизайнер мог делать более бюджетные проекты от 7 до 10 тыр , т.е. просто обычный дизайн типа этого
http://www.litkomtula.ru/
одна фотография с фотостока и аккуратно оформленные категории и разделы сайта , для менее денежных заказчиков. Общение с дизайнером будет осуществляться по средствам скайпа и любого интернет мессенджера , так что кому интересно пишите.
 

Всё-таки Drupal

  • 28 Фев, 2009 at 11:51 PM
Сколько не выбирал CMS систему для нового проекта , так и остановился на Drupal'e. На самом деле система далеко не для новичков , точнее новичкам будет очень легко навернуть её с помощью плагинов и модулей , тему какую-нибудь публичную поставить и радоваться , а вот в свой дизайн drupal 6 заковать очень тяжело. Например, чтобы переделать дизайн формы авторизации, пришлось написать свой блок и без помощи Form API ,а тупым выводом HTML кода , где все компоненты формы будут расставлены и оформлены как я хочу , а не так как диктует генератор форм друпала. Может быть кто подскажет, как элементы формы вписать в табличку , может быть плагин какой-нибудь есть или хитрость какая )? Порадовали модули taxonomy,CCK и VIEWS , очень гибкий инструмент позволяющий творить с контентом сайта всё что угодно. Создавать дополнительные поля любого типа , структурировать данные и настраивать отображение списков информации. Сейчас запускаю на друпале мощную доску объявлений , на следующей недели уже проект заработает , обязательно вам о нем расскажу и покажу.

Tags:

Drupal CMS

  • 6 Фев, 2009 at 9:34 AM
drupalНедавно выбирал CMS систему для нового проекта и решил заострить своё внимание на Drupal'е. Все подобные системы по моему мнению можно разделить на две группы , первая группа систем направленных на лёгкое расширение функционала  , тоесть установку плагинов. Внедрение плагинов реализуется по средствам хуков и что-бы с помощью плагина можно было влиять на ход программы , таким системам приходиться отказаться от шаблонизатора. Тоесть шаблоны есть , но выглядят они как обычные пхп файлы , вот так

tamplete.tpl.php
<h1><? NewsTitleList() ?></h1>

К таким системам можно отнести Drupal , WordPress, HostCMS, 1C-Bitrix и т.д. , как правило они все храмают на ногу в плане интеграции с дизайном. Тоесть нет не одного проекта на друпале , по внешнему виду которого вы бы его могли перепутать с другой системой. Возьмём самый раскрученный проект на друпале  webplanet.ru , по главной странице ничего не скажешь , но стоит нам открыть форму авторизации и сразу понятно что это Друпик ) ,я сам с этим сталкивался у него не реально переделать любую форму кроме как через CSS, а это мне кажеться большой минус.

Вторая группа систем реализована на TPL шаблонах , к ним можно отнести DLE, phpBB и другие. Эти системы легко ложатся под уникальный дизайн , скрипты только обрабатывают переменные и массивы , а вывод контролирует шаблонизатор. Вроде бы все отлично , кроме одного "НО" , очень затруднительное расширение функционала и реализуется оно с помощью "хаков" , тоесть простой замены кода на новый.

Так вот о друпале , из-за легкой расширяемости у друпала появилось много поклонников. Есть несколько русскоязычных книг , тысячи всевозможных плагинов и модулей, сотни тем оформления и ещё куча всего. У друпала есть очень мощный механизм для создания собственных форм , так называемый Forms API (подробнее тут) , только вот это и плюс и минус одновременно ))  С помощью Forms API , можно интегрировать в систему форму любой сложности за несколько минут , не задумываясь о выводе ошибок и обработки входящих данных, но на отображение формы повлиять вы никак не сможите , кроме как через CSS, а это не вариант. Ещё порадовало то, что на любой вопрос можно найти ответ на сайтах сообщества. По моему система отлично подойдёт для не комерческих проетов , сообществ и блогов, но что-то уникальное на ней не сделаешь.

Очистка текста от тегов

  • 22 Янв, 2009 at 12:33 AM
Сегодня весь день искал  функцию которая очистит код интернет страничек и выдаст на выходе только смысловой текст со знаками препинания , без всяких там html, javascript и прочих тегов. Т.е. на подобие strip_tags() , но только что бы умела вырезать ещё и яваскрипт и прочие конструкции. Так и не найдя функцию , решил написать на нескольких форумах:
http://php.ru/forum/viewtopic.php?t=16377
http://phpclub.ru/talk/showthread.php?s=&threadid=112506&rand=1
После того как ответа не дождался написал ещё в сообществе и форуме )
http://forum.vingrad.ru/forum/topic-244781.html
http://community.livejournal.com/ru_php/1314801.html

В итоге функцию подсказали в сообществе ru_php , пользователь [info]eznab  , огромное ему спасибо.

Функция называется strip_tags_smart() , вырезает всё кроме смыслового текста , описание и сама функция здесь , всем брать на вооружение )) .

Tags:

Symfony Framework

  • 20 Янв, 2009 at 8:40 AM

Для тех кто впервые слышит сочетание слов Symfony Framework , советую посмотреть этот видео ролик, лично я был очень впечатлён.
http://www.symfony-project.org/screencast/admin-generator

Про Symfony я узнал наверное года два-три назад , поковырялся немного и забросил эту затею. На тот момент система была плохо документирована , на русском языке вообще документация отсутствовала и мало людей занимались разработкой на symfony. Сегодня многое поменялось у symfony появилась толпа поклонников , соответственно и все остальное. Ниже приведу ссылки на блоги , сообщества и форумы посвященные фреймворку. Я не пропагандирую и не призываю всех пересаживаться на Symfony т.к. сам вообще не пишу на фреймворках , но внимания и уважения проект заслуживает.
 
Ссылки по теме:
http://www.symfony-project.org/ - сайт проекта
http://www.symfony-project.org/book/1_0/ - книга по Symfony
http://trac.symfony-project.org/wiki/Documentation/ru_RU - перевод книги на русский
http://translated.by/you/tags/symfony/ - корявый перевод на русский )
http://ru.wikipedia.org/wiki/Symfony - Википедия
http://developer.co.ua/posts/view/symfony__php5_mvc_frejmvork - статья по настройки и установки

Русскоязычные блоги и сообщества:
http://habrahabr.ru/blogs/symfony/
http://symfony.org.ua/
http://symfony.artsofte.ru/
http://tigor.com.ua/blog/
http://451f.com.ua/

Другие блоги:
http://www.symfony-framework.com/
http://www.thatsquality.com/section-name/symfony



PHP и OpenID

  • 15 Янв, 2009 at 8:02 PM
Извиняюсь что давно не писал , как то душа не лежала и лень было. В этом посте хотелось написать про очень актуальную на сегодняшний день технологию OpenID. Точнее собрать всё в кучу и ещё раз пояснить для чего это нужно.

С каждым днём всё труднее и труднее заставить посетителей сайта или блога пройти регистрацию (тем более если нужно активировать аккаунт через email) , с целью оставить несколько комментариев или получить доступ к дополнительным возможностям проекта. Так вот в этом случае нам на помощь и приходит технология OpenID , посетителям не нужно будет проходить регистрацию, а всего лишь указать URL сервиса в котором у вас есть OpenID аккаунт (ЖЖ тоже подойдет , т.к. является именно таким сервисом) и подтвердить авторизацию по OpenID. Подробнее про технологию читаем на википедии не буду повторяться.

Так что плюсов массу , теперь подробнее про то что читать и как прикрутить. Самая популярная библиотека на php считаеться PHP OpenID Library поможет вам организвовать как и аутентификацию по OpenID , так и самим раздавать учетные записи , то есть стать провайдером OpenID. Тут описано как заставить эту библиотеку работать и прикрутить =). И вот ещё одна статья про эту же библиотеку. Если вам нужна одна авторизация по OpenID, то предлагаю воспользоваться более простым скриптиком , код здесь , демо тут , описание тоже есть. А вообще библиотек достаточно и на PHP и на Python , один phpclasses.org на запрос OpenID выдаёт три страницы наработок и классов.

Для многих популярных CMS и Framework'ов уже есть модули и плагины , ну это уже для совсем ленивых:
http://wordpress.org/extend/plugins/openid/ - плагин для WordPress
http://symfony-project.org/plugins/sfOpenIDExtPlugin - плагин для symfony framework и описание как прикрутить на русском
http://drupal.org/project/openid - плагин для Drupal

Очень классную форму авторизации можно посмотреть тут (справа), пользователи видят знакомые значки и сами допирают для чего нужен OpenID и проходят авторизацию, а то 80% посетителей и слов таких страшных не слышали.

Tags:

На будущее

  • 4 Дек, 2008 at 9:50 PM
Не многим позже хочу написать пост о себе , а то как то неправильно получается , что я ещё не представился перед читателями ) Раньше смысла в этом посте особо не было , а сейчас уже может кому-нибудь будет интересно кто я , чем занимаюсь и чем занимался ;)
В этом посте опишу алгоритм поиска с учётом русской морфологии и релевантности , ещё поиск будет индексируемым, что увеличит скорость выдачи результатов. Морфология будет бессловарная , а именно алгоритм Портера о котором я писал в предыдущих постах. Индексация будет выполняться следующим образом , мы создадим специальную табличку где будут храниться URL'лы страниц их текст и словоформы этого текста. При добавлении и редактировании контента сайта, нужно будет изменять данные в табличке поисковика вызывая эту функцию. Тем самым какой бы не был у нас объект данные о нем будут лежать в одной табличке , а не раскиданы по всей базе , что увеличит скорость поиска в разы. Не буду подробно описывать весь алгоритм , а остановлюсь чисто на некоторых моментах , которые у вас дорогие читатели могут вызвать затруднения.

Поисковая табличка
В таблицу поискового индекса мы будем записывать url страницы , дату создания (я записываю в формате unix_time , поэтому и int(11)) , текс объекта без изменения и словоформы текста , без знаков препинания и лишних символов.
У меня получился такой дамп:

CREATE TABLE `seach_index` (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
`url` varchar(200) NOT NULL,
`page_text` text NOT NULL,  
`date` int(11) NOT NULL,
`page_words_index` text NOT NULL,
FULLTEXT (`page_text`,`page_words_index`)
) ENGINE=MyISAM;


Чистим текст
Прежде чем пихать новости и страницы в поисковую табличку, их нужно очистить от тэгов и получить словоформы. Оригинальный текст, который мы будем записывать в поле page_text , очистить от html-тэгов можно стандартной функцией  strip_tags() , а для получения словоформ, для записи в поле  page_words_index  , можно воспользоваться моей функцией clear_text():

<?
include_once('stem.php'); //Алгоритм
Стемминга
function clear_text($text)
{
    $stemmer = new Lingua_Stem_Ru();
    $text = preg_replace("/[^\w\x7F-\xFF\s]/"," ",strip_tags($text));
    $text = explode(' ',$text);
    foreach ($text as $word)
    {
        $min_word=$stemmer->stem_word($word);
        $word_array[]=$min_word;
    }
    return strtoupper(implode(' ',$word_array));
}
echo clear_text("<br>Приветствую <a href='/bla'>вас</a>, <h1>жители зёмли!</h1>");
// ПРИВЕТСТВ ВАС ЖИТЕЛ ЗЕМЛ
?>


Функция добавления индекса будет выглядеть следующим образом:

function insert_index($url,$text)
{
    $words=clear_text($text);
    $text=strip_tags($text);
    $date=time();
    mysql_query("INSERT INTO `seach_index` (`url`,`date`,`page_text`,`page_words_index`)
    VALUES ('$url',$date,'$text','$words')") or die(mysql_error());
}


Поиск
Перед поиском ключевые слова нужно будет преобразовать в словоформы всё той же функцией clear_text() и искать по полю page_words_index следующим запросом:
SELECT * from seach_index WHERE MATCH (page_words_index) AGAINST ('ЗЕМЛ')
Можно усложнить запрос и добавить подсчет релевантности, постраничный вывод , а на выводе результатов ключевые слова в поле page_text подсвечивать. Главное не забывайте изменять поисковый индекс при изменении самого объекта.

Ссылка на документацию по FULLTEXT поиску и релевантности

Tags:

Какую книгу вы прочитали последней?


Смотреть ответы (392)

Последнюю книгу Ален Карр легкий способ бросить курить я никак прочитать не могу ))) времени всё не хватает, а курить хочеться бросить. Вообще если честно, я для себя ещё сам не решил хочу я бросить курить или нет , мне просто нравиться сам процесс , люблю я попить кофе и покурить думая о каких-нибудь затыках.

JS геморрой

  • 28 Ноя, 2008 at 9:23 AM
Блин, вот нравиться мне JavaScript ,но не нравиться мне слово "кроссплатформенность". С помощью JS можно делать классные мелочи, которые делают проект более удобным и приятным. Но как представишь, что маленький скриптик надо будет в семи браузерах отладить, сразу как то и писать его становиться лень. Из всех браузеров конечно же отличился IE 6 , в нем всё работает не так как в остальных браузерах.  Для того что бы в нём найти на странице CHECKBOX и поменять его значение на checked , это уже целая проблема т.к. это делаеться не как у всех браузеров , а следовательно нужно уже добавлять проверку на браузер и т.д. Опера хоть и быстрый , но глючный браузер без возможности отдебагить JS скрипт. Кстати недавно вышла бета версия IE 8 , если честно многие моменты приятно удивили. Новый IE более менее заработал как нормальный  браузер , появился очень мощный инструмент для отладки JS и CSS , такое чувство что мелкомягкие чисто скин к Firefox'у другой нарисовали и продают как IE 8 ))
Хочу вашему вниманию представить алгоритм Стеммер Портера , для получения корня слова и дальнейшего поиска уже по корню. Алгоритм не использует словари этим в принципе всех и привлекает , не нужно хранить на сайте бинарные файлы словарей весом в десятки мегабайт. И работает он гораздо быстрее своих словарных конкурентов , хоть и не так качественно как phpMorphy или ruMor.
<?php
class Lingua_Stem_Ru
{
    var $VERSION = "0.02";
    var $Stem_Caching = 0;
    var $Stem_Cache =
array();
    var $VOWEL = '/аеиоуыэюя/';
    var $PERFECTIVEGROUND = '/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$/';
    var $REFLEXIVE = '/(с[яь])$/';
    var $ADJECTIVE = '/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)$/';
    var $PARTICIPLE = '/((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))$/';
    var $VERB = '/((ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))$/';
    var $NOUN = '/(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)$/';
    var $RVRE = '/^(.*?[аеиоуыэюя])(.*)$/';
    var $DERIVATIONAL = '/[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?$/';

    function s(&$s, $re, $to)
    {
        $orig = $s;
        $s =
preg_replace($re, $to, $s);
        return $orig !== $s;
    }

    function m($s, $re)
    {
        return
preg_match($re, $s);
    }

    function stem_word($word)
    {
        $word =
strtolower($word);
        $word =
strtr($word, 'ё', 'е');
        # Check against cache of stemmed words
        if ($this->Stem_Caching &&
isset($this->Stem_Cache[$word])) {
            return $this->Stem_Cache[$word];
        }
        $stem = $word;
        do {
          if (!
preg_match($this->RVRE, $word, $p)) break;
          $start = $p[1];
          $RV = $p[2];
          if (!$RV) break;

          # Step 1
          if (!$this->s($RV, $this->PERFECTIVEGROUND, '')) {
              $this->s($RV, $this->REFLEXIVE, '');

              if ($this->s($RV, $this->ADJECTIVE, '')) {
                  $this->s($RV, $this->PARTICIPLE, '');
              } else {
                  if (!$this->s($RV, $this->VERB, ''))
                      $this->s($RV, $this->NOUN, '');
              }
          }

          # Step 2
          $this->s($RV, '/и$/', '');

          # Step 3
          if ($this->m($RV, $this->DERIVATIONAL))
              $this->s($RV, '/ость?$/', '');

          # Step 4
          if (!$this->s($RV, '/ь$/', '')) {
              $this->s($RV, '/ейше?/', '');
              $this->s($RV, '/нн$/', 'н');
          }

          $stem = $start.$RV;
        } while(false);
        if ($this->Stem_Caching) $this->Stem_Cache[$word] = $stem;
        return $stem;
    }

    function stem_caching($parm_ref)
    {
        $caching_level = @$parm_ref['-level'];
        if ($caching_level) {
            if (!$this->m($caching_level, '/^[012]$/')) {
               
die(__CLASS__ . "::stem_caching() - Legal values are '0','1' or '2'. '$caching_level' is not a legal value");
            }
            $this->Stem_Caching = $caching_level;
        }
        return $this->Stem_Caching;
    }

    function clear_stem_cache()
    {
        $this->Stem_Cache =
array();
    }
}
?>
Пример:
<?
$stemmer = new Lingua_Stem_Ru();
echo $stemmer->stem_word('Котеровыми');
?>

Не забудьте перед поиском в ключевом выражении заменить букву Ё на Е.
geoip ip2long ip2countryПеред многими разработчиками рано или поздно встаёт задача определения города и страны посетителя своего сайта. Понадобиться это может в массе случаях , ну к примеру на многоязыковых сайтах ,посетитель входит на сайт и сразу видит знакомый ему язык.Или на запрос пользователя ввести город проживания , подсветите найденный по GeoIP базе результат, 70% посетителей сайта войдут в лёгкое недоумение, типа "Откуда сайт знает, что я из Тамбова ???" ) Для того, что бы это реализовать вам понадобиться GeoIP база данных, вот несколько из них:




http://ip2city.ru/
- отличная база, преимущественно по России и странам СНГ. На сайте есть ссылка на скачивание базы в формате CVS и демо проекта.База полностью бесплатная.

http://techinfo.net.ru/ip2ruscity/ - не плохая база по России и СНГ, но смысла в ней особого нет. Платная версия обновляется постоянно стоит 2000р. ,а определяет город хуже чем ip2city, а бесплатная версия 2004 года, так что не вариант.

http://ip-to-country.webhosting.info/node/view/36 - небольшая база , определяющая только страну посетителя. База бесплатная.

http://www.maxmind.com/app/lookup_city?type=geolite - самая полная база по городам всего мира, есть платная и бесплатная версия , отличаются точностью определения результата. База действительно отличная кроме одного НО, база заключена в бинарный файл и для работы с ней есть специальный класс на пхп.

http://php.ru/ip2country/ - база определения страны посетителя , т.к. она не большая и грамотно составлена, я пользуюсь именно ей.

Для увеличения производительности IP адрес представляется в виде десятичного числа, для преобразования есть в пхп две функции ip2long и long2ip. Если вам просто нужна база городов для сайта , вы так же можите сгруппировать её из имеющейся GeoIP базы.

Profile

[info]gv0zdik
gv0zdik

Latest Month

Июль 2009
Вс Пн Вт Ср Чт Пт Сб
   1234
567891011
12131415161718
19202122232425
262728293031 

Syndicate

RSS Atom
Разработано LiveJournal.com
Designed by Lilia Ahner