Алексей Марьин

ворчун и зануда

 
XSLT

С XSLT работаю с 2003-го года.
Считаю отличной технологией для шаблонизации.
Очень хорошо, что позволяет реализовывать достаточно сложную логику, которая бывает необходима для отображения данных.

<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

	xmlns:func="http://exslt.org/functions"
	xmlns:ext="http://www.groundzero.ru/ext"
	extension-element-prefixes="func ext"
>
	<func:function name="ext:buildDate">
		<xsl:param name="date"/>
		<xsl:param name="strip">true</xsl:param>

		<func:result select="document(concat('parser://XMLExtBuildDate', '/__date/', $date, '/__strip/', $strip))/result/date"/>
	</func:function>

	<func:function name="ext:getAntispam">
		<xsl:param name="count">10</xsl:param>

		<func:result select="document(concat('parser://XMLExtGetAntispam', '/__count/', $count))/result/antispam_list"/>
	</func:function>
</xsl:stylesheet>
MySQL

Проектирование баз, нормализация, денормализация.
Знаю, что такое LEFT JOIN и почему не нужно его бездумно использовать.
Безо всякого стеснения, нагло пользуюсь индексами.

CREATE TABLE `realtyCompanyTagGroup` (
	`sCompanyTagGroupUUID` varbinary(16) NOT NULL,
	`sName` varchar(255) NOT NULL,
	`bVisible` enum('true','false') NOT NULL default 'false',
	`sDescription` text,
	`iSortOrder` tinyint(4) NOT NULL default '1',
	PRIMARY KEY  (`sCompanyTagGroupUUID`),
	UNIQUE KEY `ixUniqueCompanyTagGroupName` (`sName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `realtyCompanyTag` (
	`sCompanyTagUUID` varbinary(16) NOT NULL,
	`sCompanyTagGroupUUID` varbinary(16) NOT NULL,
	`sURI` varchar(63) NOT NULL,
	`sName` varchar(255) NOT NULL,
	`bVisible` enum('true','false') NOT NULL default 'false',
	`sDescription` text,
	`iSortOrder` tinyint(4) NOT NULL default '1',
	PRIMARY KEY  (`sCompanyTagUUID`),
	UNIQUE KEY `ixUniqueCompanyTagURI` (`sURI`),
	UNIQUE KEY `ixUniqueCompanyTagName` (`sName`),
	KEY `CompanyTagGroup` (`sCompanyTagGroupUUID`),
	KEY `ixCompanyTagURI` (`sURI`,`bVisible`),
	CONSTRAINT `CompanyTagGroup` FOREIGN KEY (`sCompanyTagGroupUUID`) REFERENCES `realtyCompanyTagGroup` (`sCompanyTagGroupUUID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
пример схемы таблиц БД
Parser 3

С Parser 3 дружу с 2002-го года.
До сих пор с удовольствием пишу всякое, до недавнего времени работа на нём — основное занятие.
Простой, удобный ООП-язык, подходящий для реализации широкого спектра задач.
Чего не умеет сам, легко делает, вызывая сторонние утилиты.

@_deleteImageFile[hOptions][sImageFileDir;tImageFileList]
# $result	void

$hOptions[^hash::create[$hOptions]]

$sImageFileDir[$self.hParams.sAloneGalleryFileDir/$self.sAlbumURI/$self.sImageUUID]
$tImageFileList[^file:list[$sImageFileDir;^if(^hOptions.bIgnoreSource.bool(false)){^(?!$self.sImageUUID)}]]

^tImageFileList.menu{
	^Operator:deleteFile[$sImageFileDir/$tImageFileList.name]
}

$result[]
ООП-модель классов меток компании ООП-модель классов галереи
Python

С Python отношения не очень давние.
Пока работаю исключительно в окружении Django.

def get_formset(self, request, obj=None, **kwargs):
	self.obj = obj
	if obj:
		self.extra = obj.form.fields_form.count() - obj.values.count()
	else:
		self.extra = 0

	return super(ValueInline, self).get_formset(request, obj, **kwargs)

def formfield_for_dbfield(self, db_field, **kwargs):
	field = super(ValueInline, self).formfield_for_dbfield(db_field, **kwargs)

	if db_field.name == 'field' and hasattr(self, 'obj') and self.obj:
		field.choices = [('', '---------')]
		field.choices.extend(Field.objects.filter(form=self.obj.form).values_list('id', 'title'))

	return field
Django

В 2008-м занялся освоением Django.
ORM-слой устраняет тонны рутины, а MVC-подход способствует организации кода.
Вещь не без недостатков, но удобна.

@register.inclusion_tag('linear_tags_cloud.html')
def linear_tags_cloud(tags, params='', selected_tags=[]):
	params = get_params(params)
	root = get_url(params.get('root', u''))

	for tag in tags:
		tag.url = u'%s%s/' % (root, tag.slug())
		if len(selected_tags) > 1:
			for selected_tag in selected_tags:
				if tag == selected_tag:
					tag.parent = True
		else:
			for selected_tag in selected_tags:
				if tag == selected_tag:
					tag.current = True

		except_url = append_url = root
		if len(selected_tags) > 1:
			for selected_tag in selected_tags:
				append_url += u'%s/' % selected_tag.slug()
				if tag != selected_tag:
					except_url += u'%s/' % selected_tag.slug()
		else:
			except_url = get_url(params.get('index', root))
			for selected_tag in selected_tags:
				append_url += u'%s/' % selected_tag.slug()

		tag.except_url = except_url
		tag.append_url = u'%s%s' % (append_url, tag.slug())

	no_all_tag_link = False
	if 'no_all_tag_link' in params:
		no_all_tag_link = True

	return {
		'tags_cloud': tags,
		'all_tags_url': root,
		'all_tags_title': params.get('all_tags_title', u'все метки'),
		'no_all_tag_link': no_all_tag_link
	}
jQuery

Отличный фреймворк, экономит массу сил и времени.
Оказывается, клиентское программирование может быть интересным и приятным.

$(headers).each(function(index) {
	var id = 'item_' + generateID($(this).text());

	$(this)
	.attr('title', show_title)
	.attr('id', id)
	.addClass('active')
	.next('dd').hide()
	.end()
	.click(function(event) {
		var header = this;
		var description = $(this).next('dd').children('.description').hide();

		$(this).toggleClass('opened').next('dd').slideToggle(speed, function() {
			if($(header).hasClass('opened')){
				$(description).fadeIn(speed, function() {if($.browser.msie) $(this).get(0).style.removeAttribute('filter')});

				header.title = close_title;
			}else{
				$('#' + id + '_description').hide();

				header.title = show_title;

				titleMosaic($(this).children('.mosaic').rand('img').children('img'));
			}

			checkControls();
		});
	});
});
(X)HTML

К вёрстке никогда особой любви не питал, однако, она — часть работы.
Сторонник прагматичного подхода, но валидностью документа стараюсь не пренебрегать.

Valid XHTML 1.0 Strict

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
	<head>
		<title>Алексей Марьин</title>

		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

		<link rel="copyright" title="Алексей Марьин" />

		<link href="favicon.ico" type="image/x-icon" rel="shortcut icon"/>
		<link href="css/default.css" rel="stylesheet" type="text/css"/>
		<link href="css/index.css" rel="stylesheet" type="text/css"/>
		<link href="css/print.css" rel="stylesheet" type="text/css" media="print"/>

		<!--[if IE]>
			<link href="css/ie.css" rel="stylesheet" type="text/css"/>
		<![endif]-->
	</head>
	<body>
		<div id="body">
			<div id="top">
				<div id="topLeft">
					<img src="/img/logo.png" width="82" height="40" alt="" class="logo"/>
				</div>
				<div id="topRight">
					<h1>Алексей Марьин</h1>
					<h2>ворчун и зануда</h2>
				</div>
			</div>
			<div id="middle">
				<div id="middleLeft">
				</div>
				<div id="middleCenter">
					<div class="content">
					</div>
				</div>
			</div>
		</div>
	</body>
</html>
CSS

CSS владею уверенно.
Жаль, что столько беспорядка в стане браузеров.
Хаки стараюсь не использовать, получению необходимого любыми средствами предпочту компромисс.

Valid CSS 2.1

body { font-family: "Trebuchet MS", Tahoma, Verdana; color: #2b334c; margin: 20px; padding: 0px; }
form { margin: 0px; }
input, textarea, select { color: #2b334c; font-size: 1em; font-family: "Trebuchet MS", Tahoma, Verdana; }
fieldset { padding: 0px; margin: 0px; border: none; }

img { border: 0px; }
br { clear: both; }
em { color: #95a9ca; }
p { margin: 0px; padding: 0px; line-height: 1.4em; }
pre { max-width: 900px; overflow: auto; font-family: Сonsolas, сourier; font-size: .85em; }

.content { padding: 0px 20px; }

a:link { color: #589de3; }
a:visited { color: #8285f8; }
a:hover { color: #ff5e64; }
a:active { color: #000000; }
Photoshop

Использую с версии 5.5.
Чувствую себя сухо и комфортно.

При работе для web, зачастую, проще сделать задуманное сразу в HTML, нежели тратить время и силы на отрисовку в макете.
Считаю, Photoshop`у недостаёт ряда функций и инструментов для, по-настоящему, удобной работы с макетом страницы.

«Wave» «Massive Attack» «Stein um stein» «Path» «Dark moon» «Massive Attack» «МИР NVIDIA» «Massive Attack»

Rhino, 3DMax, V-Ray, Brazil

Занимался NURBS-моделированием в Rhino.
3DMax использовал, по большей части, как среду для V-Ray, минимум curves-моделирования.
Непродолжительное время, для ряда иллюстраций, работал с Brazil.

Люблю применять 3D в иллюстрациях и для web. Контраст в сочетании объёмного декора и плоского, рафинированного, текста даёт интересные результаты.

«МИР NVIDIA» «Wares» диски модель сабвуфера «RFL 152» «Q3» модель сабвуфера «RFL 152» «Prodigy» «2004 new year» модель телефона «Alcatel OT 535» схема зала для сайта театра Стаса Намина схема проезда для сайта театра Стаса Намина «Spheres» долька Мир, труд, май «Чипсеты» монитор «Phillips» монитор «Phillips» окно в разрезе

Дизайн, графика

Графический дизайн, веб-дизайн, логотипы, полиграфия.

обложка руководства пользователя программного комплекса «ОРИОН» ЮРКЦ «Земля» набор иконок для программных комплексов ЮРКЦ «Земля» набор иконок для сайта ЮРКЦ «Земля» логотип «Ridens`а» логотип «Вида из окна» баннер для «Вида из окна» баннер для «Вида из окна» визитная карточка для «Вида из окна» визитная карточка для «Ridens`а» дизайн сайта «МИР NVIDIA» дизайн сайта «Вид из окна» дизайн сайта театра Стаса Намина «Поиск» для «Вида из окна» «Разворот» для «Вида из окна» «Избранное» для «Вида из окна»

Интерфейс, юзабилити

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

навигация по объявлениям на «Виде из окна» навигация по компаниям на «Виде из окна» переписка пользователей на «Виде из окна» анкета пользователя на «Виде из окна» FAQ на «МИРе NVIDIA» отбор вопросов по нескольким меткам в FAQ`е на «МИРе NVIDIA» анкета железяки на «МИРе NVIDIA» отбор железяк по критериям на «МИРе NVIDIA» фильтры поиска объявлений на «Виде из окна» корзина покупателя и оформление заказов в интернет-магазине на сайте «Авиамаркета» управление заказами интернет-магазина на сайте «Авиамаркета» загрузка изображений на «Виде из окна» фасетный каталог на сайте «Мой вертолёт» поиск организаций на сайте «Мой вертолёт» список объявлений на «Виде из окна» (проект) страница списка объявлений на «Виде из окна» (проект) страница объявления на «Виде из окна» (проект) выборочный список объявлений на «Виде из окна» (проект)

Идеология

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

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

Занудство и ворчание

Вредный, неполезный!

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

Проекты

Занимался всем спектром работ для web и не только.
Концепция, проектирование, разработка, дизайн, иллюстрации, вёрстка, шаблонизация, юзабилити-инспекция, редакционная подготовка.

Консультации по дизайну, юзабилити, организации материала.

  • Вид из окна — http://vidizokna.ru/ — интернет-площадка продажи и аренды недвижимости.
    Разработка концепции, дизайн, графика, проектирование, программирование, частично вёрстка и XSLT-шаблонизация.
  • Мой вертолёт — http://myhelicopter.ru/ — проект о вертолётах для интересующихся.
    Проектирование, программирование, частично вёрстка и XSLT-шаблонизация.
  • Ridens — http://ridens.ru/ — сайт студии «Ridens».
    Дизайн, графика, логотип, стиль, проектирование, программирование, вёрстка и XSLT-шаблонизация.
  • Аэросоюз — http://www.aerosouz.ru/ — сайт компании «Аэросоюз».
    Проектирование, программирование, частично вёрстка и XSLT-шаблонизация.
  • Eurocopter в России — http://eurocopter-russia.ru/ — сайт о вертолётах «Eurocopter» для компании «Аэросоюз».
    Проектирование, программирование, вёрстка и XSLT-шаблонизация.
  • Agusta Westland в России — http://agusta-russia.ru/ — сайт о вертолётах «Agusta Westland» для компании «Аэросоюз».
    Проектирование, программирование, вёрстка и XSLT-шаблонизация.
  • МИР NVIDIA — http://nvworld.ru/ — сайт о продукции компании «NVIDIA», один из старейших «железных» сайтов рунета.
    Дизайн, графика, проектирование, программирование, вёрстка и шаблонизация.
  • ALT-форум Parser 3 — http://parser.groundzero.ru/ — линейное представление серьёзной базы знаний — форума «Parser 3».
    Дизайн, графика, проектирование, программирование, вёрстка и XSLT-шаблонизация.
  • Вертолёты Bell — сайт о вертолётах «Bell» для компании «Аэросоюз».
    Проектирование, программирование, вёрстка и XSLT-шаблонизация.
  • Одежда John Douglas — сайт об одежде «John Douglas» для компании «Аэросоюз».
    Проектирование, программирование, вёрстка и XSLT-шаблонизация.
  • Сайт вертолётной компании «Авиамаркет» (ныне переделан).
    Проектирование, программирование, частично вёрстка и XSLT-шаблонизация.
  • «Автосайт» — информационно-торговый проект про автомобили.
    Проектирование, программирование, частично вёрстка и XSLT-шаблонизация.
  • «BMW Sale» — информационно-торговый проект про автомобили BMW и Mini.
    Проектирование, программирование, частично вёрстка и XSLT-шаблонизация.
  • Сайт южного регионального кадастрового центра «Земля».
    Дизайн, графика.
  • Сайт ВИА «Цветы» — http://www.flowersrock.ru/.
    Программирование.
  • И порядка десяти прочих проектов, различной направленности.
Контактная информация
  • сайт — http://groundzero.ru/ (← вы здесь)
Написать мне