+60.64
450 читателей, 105 топиков

Чего я хочу для LiveStreet или HighLoad играет значение

Смысл этого топика не в том что бы изменить ход развития LiveStreet или отметить его недостатки — нет. LiveStreet была и будет системой ориентированной на широкие массы, поэтому требовать от нее большего я не в праве, но я могу изменять свои проекты, делать свои решения и предоставлять их на суд.

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

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

Redis(а может и Node.js)
Первое изменение которой я бы сделал в своем проекте — использовал Redis для хранения событий пользователей. Использование MySQL для таких вещей не самоубийсво, но все таки очень тормознутое решение нежели Redis, для которой шустрость второе имя. Ко всему прочему можно добавить возможность publish/subscribe, позволяющая в купе с node.js выводить уведомления такие же как в Вконтакте. Размышляя в этом направлении можно расширить границы использования этой БД. Для осуществления работы можно использовать библиотеку Rediska, разработанную с подачи нашего соотечественника.

Тем кто заинтересовался темой будет уютнее почитать подробности тут, чем читать обрывки вырезанных из текста абзацев — Redis.

MongoDB
Данных у нас много и все они хранятся в реляционной базе данных. Что если нам координально изменить парадигму хранения данных и использовать MongoDB. Выиграем мы и в скорости запросов и в скорости работы с данными продолжая использовать ORM, потому как в MongoDB оно организованно на уровне C++, а не эмулируются как сделанно в данный момент в LiveStreet. Но за это разработчикам стоит сказать отдельное спасибо, т.к это было действительно ценное решение ускоряющее разработку.

Подробности в виде презентации — Mongodb.

PS
Я просто показываю вам что вы можете сделать со своим LiveStreet и какой космос открыт перед вами :)

Если вы в этом шарите думаю все будут только рады перенять ваш опыт :)

Занимательный ЛС: парсер

Был неприятно удивлен ковырянием на дне парсера ЛС некоторыми особенностями обработки текста.

что же произошло?..

CSS-неймспейсы для Internet Explorer

Дабы не плодить кучи css-файлов для разных версий ишака, придумал такой скриптик:

/**
 * Adds css classes to body like ie, ie-6, ie-gte-5-5, ie-not-7, etc.
 * depends on msie browser version
 * 
 * @author Sergey S Yaglov
 * @link http://livestreet.ru/profile/1d10t/
 */
jQuery(function(){
	if(!jQuery.browser.msie){
		return;
	}
	var versions = ['5.5',6,7,8,9,10];
	var body = jQuery('body:eq(0)');
	var bv = jQuery.browser.version;
	var classes = ['ie'];
	var signs = {
		'==': '-',
		'>=': '-gte-',
		'>': '-gt-',
		'<=': '-lte-',
		'<': '-lt-',
		'!=': '-not-'
	};
	jQuery.each(versions, function(i,v){
		for(var sign in signs){
			var css_sign = signs[sign];
			eval('if(bv '+sign+' v){classes.push("ie"+css_sign+new String(v).replace(".","-"));};');
		}
	});
	body.addClass(classes.join(' '));
});


Применять в css-файлах можно, например, так:

.my-class { ... стиль для нормальных браузеров ... }
body.ie .my-class{ ... стиль для ненормальных браузеров :) ... }
body.ie-gte-7.ie-lte-8 .my-class{ ... стиль для ишаков от 7 до 8 версии включительно ... }

Использование Gravatar

Использовать у себя Gravatar.com очень просто. Аватарка выдаётся по url-у с md5-хешем e-mail-а пользователя.
Итого:
в classes\modules\user\entity\User.entity.class.php
находим функцию
public function getProfileAvatarPath($iSize=100) {   
    	if ($this->getProfileAvatar()) { 	
        	return DIR_WEB_ROOT.DIR_UPLOADS_IMAGES.'/'.$this->getId().'/avatar_'.$iSize.'x'.$iSize.'.'.$this->getProfileAvatarType();
    	} else {
    		return DIR_STATIC_SKIN.'/images/avatar_'.$iSize.'x'.$iSize.'.jpg';
    	}
    }

и изменяем всего одну строчку:
public function getProfileAvatarPath($iSize=100) {   
    	if ($this->getProfileAvatar()) { 	
        	return DIR_WEB_ROOT.DIR_UPLOADS_IMAGES.'/'.$this->getId().'/avatar_'.$iSize.'x'.$iSize.'.'.$this->getProfileAvatarType();
    	} else {
		return "http://www.gravatar.com/avatar.php? gravatar_id=".md5( strtolower($this->getMail()) )."&size=".$iSize;
    	}
    }


К сожалению, в комментариях так просто получить аватарку не получится — так как там используется своя функция
getUserProfileAvatarPath($iSize=100)
из TopicComment.entity.class.php

Убираем константы из шаблонов

После прочтения вот этого поста: Убираем дублирование при добавлении роутинга, понял что эта проблема волнует не только меня. Хочу поделиться своими соображениями на этот счет.

Linch правильно заметил, что при добавлении нового роута приходиться дублировать информацию. Но, на самом деле здесь происходит более «серьезное» дублирование, чем копипаст из config/config.route.php в Viewer.class.php — мы дублируем функционал по составлению пути — один раз это делает программист, разрабатывая модуль, второй раз это делает верстальщик, когда делает шаблон. Большее неудобство не в том, как мы доставим константу во Viewer, а именно в том факте, что верстальщику этими константами нужно пользоваться.

Если нам вдруг понадобиться изменить принцип роутинга, то придется перелапачивать весь шаблон, исправляя ошибки адресов. Имхо, если Router, решает какой Action должен отработать, пусть сам нам скажет, как к этому Action нужно обратиться. Тогда необходимость в константах во Viewer`e вообще отпадет сама собой.

Как этого добиться? Под катом 20 строчек кода.

Читать дальше →

Вводим описание блога для поля Description вручную

Возможно, что-то сделал не правильно. Я в PHP — 0)))

Добавил новое поле при добавление блога, для ввода описания поля description, независимо от самого описания блога которое выводится на странице.

Итак, приступим.


Читать дальше →

валидация тега <cut>

Сейчас занимаюсь созданием сайта на базе данной CMS. Может кто-то обвинит меня в излишней скурпулезности, но я люблю чтобы мои сайты были валидными. Вопрос в тэге
<cut>
, дело в том что этот тэг является не HTML тэгом, а внутренним тэгом CMS, и поэтому в коде страниц этого тэга быть не должно во избежание всяческих эксцессов. При добавлении или редактировании топика данный тэг не удаляется из текста топика после разбиения его на анонс и полный текст. Я поступил следующим образом:

Читать дальше →

Шаг навстречу новым пользователям

Многие люди, которые заходят на сайты livestreet даже не догадываются что они могут писать свои новости! А все потому что они не видят кнопочку создать новость.

Давайте сделаем кнопочку «создать» видимой для незарегистрированных пользователей.
Читать дальше →

Модернизация профиля: Часть 1. Скрываем профиль от посторонних

в процессе модернизации своего профиля реализовал несколько фишечек.
По заявка фишка номер раз: Скрываем профиль от посторонних глаз.

Читать дальше →