Search
Write a publication
Pull to refresh
0
0
auth @auth

User

Send message

«Прямой эфир» для общения c посетителями вашего сайта

Reading time3 min
Views5.4K
Недавно я анонсировал Realplexor — habrahabr.ru/blogs/hi/79189 — однопоточный событийно-ориентированный Comet-сервер, написанный на Perl и имеющий готовое API для JavaScript и PHP. С его помощью можно создавать сайты, пользователи на которых взаимодействуют друг с другом в реальном времени, не перезагружая страницу и без значительного расхода трафика.

Сегодня я хочу представить и, как водится, немного «покопаться в моторе» первой версии продукта Прямой эфир, работающей на платформе РуТвит с применением Realplexor-а. Это виджет, который вебмастер может за 1 минуту установить на свой сайт, чтобы устроить микроблоггинг-общение с аудиторией в режиме реального времени.

С помощью «Прямого эфира» аудитория сайта общается между собой в реальном времени — «прямо сейчас», находясь в отдельной «чат-комнате», привязанной к вашему сайту. Виджет можно использовать для «прямого диалога» сразу со многими пользователями: например, для приема багов или фич-реквестов. Если пользователь, с которым вы общались, всё еще на сайте, вы увидите его присутствие: около его имени будет зеленый кружочек.

Для начала общения посетителю сайта нет необходимости проходить процедуру регистрации. Авторизация производится по OpenID. Т.е. ему достаточно иметь аккаунт на Яндексе, Google, LiveJournal и т.д., чтобы начать писать сообщения; не требуется даже e-mail.
Читать, как это устроено внутри

Оптимизируем рабочее время, эксперимент. Часть 2

Reading time2 min
Views2K
Прошел месяц, как я стал сбрасывать время на сотовом перед сном на 00:00. Делаю это с одной целью — расходовать своё время рационально. Основная причина данной идеи — сбитый график работы. Я могу спать днём и работать ночью, могу спать ночью и работать днём и схемы работы могут меняться каждый день. Сегодня у меня пруха и я двое суток не спал, а у меня прухи нет, я поиграл, забухал и уснул в середине дня. И каждое «утро», открывая глаза, сложно понять где, что, когда? В течении дня сложно пристроиться к глобальному времени. Что у меня сейчас? Обед или ужин? Когда я проснулся?
Сбивая часы на 00:00 перед сном и устанавливая будильник на 06:30, я решил проблему учёта времени, создав локальное, динамическое «время».
Прошёл месяц и я могу поделиться впечатлениями.
Во-первых, весь месяц, не пропустив не дня, я сбивал часы, когда ложился спать. Работал ли я дома или ездил по делам в другие города, просыпался я всегда по будильнику в 06:30, либо 08:30. И не собираюсь бросать это занятие, т.к. понял для себя, что это оч. удобно. Лично для меня.
Читать дальше →

Проблемы сжатия и объединения Javascript

Reading time5 min
Views16K
сжатие текстовых файловПосле публикации ряда заметок на тему сжатия и объединения JavaScirpt-файлов стоит все же осветить наиболее характерные проблемы этого самого сжатия и объединения.

Начнем с простого: как JS-сжатие способно испортить нам настроение. И как его поднять обратно :)

UPD стартовал конкурс ускорения сайтов. В призах: монитор, веб-камера, мышь. Все гипер-быстрое.
Читать дальше →

Создаём тему для Drupal 6. Часть 1

Reading time11 min
Views29K
image
По созданию тем для друпала в интернете можно найти несколько статей (хорошая статья, советую почитать), однако обычно всё заканчивается банальным набором шаблонов и инфо-файлом. В этом топике я постараюсь доступно рассказать как создать гибкую и не самую простую тему.

Начало


Для начала нам потребуется создать директорию в каталоге sites/all/themes с названием нашей темы. Я назвал тему mytheme и создал каталог sites/all/themes/mytheme.
В созданном каталоге создаем директории css — для стилей, js — для скриптов, images — для картинок, templates — для шаблонов, preprocess — об этом позже. Также создаем файл template.php в котором мы будем писать всю логику темы и mytheme.info для описания темы. Можно еще добавить favicon.ico и logo.png.
Читать дальше →

Создаём тему для Drupal. Часть 2

Reading time6 min
Views10K
imageЧасть 1

Препроцессы


Препроцессы нужны для того, чтобы определить, какие переменные будут доступны в шаблонах. Препроцессы мы будем складывать в sites/all/themes/mytheme/preprocess. Создадим файлы preprocess-page.inc — для страницы, preprocess-node.inc — для контента, preprocess-header.inc — для шапки, preprocess-footer.inc — для подвала, preprocess-region.inc — для регионов, preprocess-block.inc — для блоков, preprocess-comment.inc — для комментариев. Также мы можем создавать файлы типа preprocess-node-story.inc для обработки материала типа story или preprocess-block-user.inc для блока user. Это позволяет обрабатывать отдельно разные типы содержимого сайта. В основном в препроцессах я определял классы для разных регионов сайта.
Читать дальше →

Создаём тему для Drupal. Часть 3

Reading time3 min
Views32K
image
Часть 1, Часть 2

Шаблоны


Шаблоны мы будем складывать в sites/all/themes/mytheme/templates. Создадим шаблоны page.tpl.php — для страниц, node.tpl.php — для контента, block.tpl.php — для блоков, comment-wrapper.tpl.php — для блока с комментариями, comment.tpl.php — для одного комментария, header.tpl.php — для шапки, footer.tpl.php — для подвала, region.tpl.php — для регионов. Также, по аналогии с препроцессами, мы можем создавать файлы типа node-story.tpl.php для отображения материала типа story или block-user.tpl.php для блока user. Это позволяет темизировать отдельно разные типы содержимого сайта.
Читать дальше →

Проблемы на пути выращивания хороших IT-специалистов — Часть 2

Reading time3 min
Views2.2K
Долго размышлял на досуге о том что было написано в первом топике и решил немного продолжить обсуждение данной темы, и подтолкнул меня на сие вот такой комментарий.

О том что подобные программы довольно часто практикуются на западе я немного наслышан. Но встает вопрос о том почему же нельзя устраивать что-то подобное у нас в стране?

Рискну предположить что возможно в силу уникальности менталитета нашего народа человеку добившемуся определенных высот(статуса, денег и т.д.) уже нет интереса выступать перед студентами чтобы еще как-то прославится или заслужить уважение. А в свою очередь те кто еще не достиг чего-либо значимого тратят все свои усилия на достижение всего вышесказанного :), но только не таким образом. Так или иначе, предлагаю обсуждение данного вопроса плавно перевести в немного другую плоскость. А именно — почему бы не вводить подобную практику не от лица отдельных индивидов, а от лица целых IT-компаний?

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

Первая встреча клуба DZ – MongoDB, Clojure, MapReduce и Azure

Reading time2 min
Views1.2K
Вчера побывал на интересном мероприятии и хотел поделиться впечатлениями. Мероприятие представляло из себя неформальную встречу с открытыми обсуждениями, общением и множеством практической информации.

С некоторой статистикой вы можете ознакомиться в ЖЖ главного организатора Дмитрия Завалишина из Digital Zone.

Вкратце по темам – MongoDB, Clojure, MapReduce и Azure. В ходе первоначального знакомства всех пришедших стало известно, что основная часть людей пришла послушать про мир без SQL в лице MongoDB.
Подробнее...

Перевод — BoxedIce делится опытом перехода с MySQL на MongoDB

Reading time6 min
Views7.5K
Ссылка на эту статью уже мелькала на Хабре и я столкнулся с интересом к ней. Многие испытали проблемы с освоением оригинала на английском и я решил перевести ее.

Заметки об использовании MongoDB в продакшене


Год назад в июле я писал о том, что мы перешли с MySQL на MongoDB.
Мы запустили MongoDB в продакшене для сервиса мониторинга Server Density. С тех пор прошло 8 месяцев и мы столкнулись с некоторыми вещами.
Читать дальше →

Перегрузка функций в JS

Reading time4 min
Views57K
Как известно, в JavaScript нельзя создать несколько функций, различающихся только списком параметров: последняя созданная перезапишет предыдущие. Про различие на уровне типов параметров говорить не приходится вообще. Обычно, если программист хочет создать функцию с множественным интерфейсом, он пишет что-то вроде такого:
  1. // getRectangleArea(x1, y1, x2, y2) или
  2. // getRectangleArea(width, height)
  3. function getRectangleArea(x1, y1, x2, y2) {
  4.   if(arguments.length==2) return x1*y1;
  5.   return (x2-x1)*(y2-y1);
  6. }
* This source code was highlighted with Source Code Highlighter.

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

Свежий глоток воздуха для Ubuntu

Reading time3 min
Views1.3K
Ура, хабратоварищи!

New Ubuntu logo

После стольких лет безделья работы команда дизайнеров Canonical в связке с Art community наконец-то представила свое виденье развития главного бренда компании, нашей почти всеми любимой Ubuntu!

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

Ознокомиться можно на вики-страничке (осторожно, english). Скромный перевод под хабракатом.
Читать дальше →

Паттерн проектирования «Декоратор» / «Decorator»

Reading time4 min
Views94K
Почитать описание других паттернов.

Проблема


Возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс в целом.

Описание


Для более детального понимания проблемы, рассмотрим конкретную ситуацию. Пусть имеется некоторый объект — «кнопка», принадлежащий классу объектов «Кнопка», на который понадобилось возложить дополнительные обязанности. Под обязанностями, в данном контексте, понимаются какие-либо особенности поведения объекта. В случае с кнопкой, можно рассмотреть поведение объекта при его отображении на экране. При этом, будем считать, дополнительными обязанностями — отображение рамки кнопки, надписи, иконки. Важно понимать, что все эти обязанности должны иметь возможность быть наложенными как одновременно, так и по отдельности. Очевидно, первое, что приходит на ум — порождение классов (механизм наследования). Для данной задачи возможно это и выход — расширить класс «Кнопка» семью (23-1 = 7) различными классами, сочетающими в себе всевозможные комбинации обязанностей. Это классы: «Кнопка_С_Надписью», «Кнопка_С_Рамкой», «Кнопка_С_Иконкой», «Кнопка_С_Надписью_И_Иконкой», «Кнопка_С Рамкой_И_Иконкой», «Кнопка_С_Надписью_И_Рамкой», «Кнопка_С_Надписью_И_Рамкой_И_Иконкой». А если таких обязанностей будет не три, а хотя бы десять, не говоря уже про неудобство работы с подобной структурой. Безусловно, порождение классов в таком случае — заведомо проигрышный вариант. Однако, из этой ситуации есть выход — паттерн «Декоратор».
Читать дальше →

Тонкости использования селекторов аттрибутов в CSS

Reading time4 min
Views35K
CSS может связываться с HTML элементами используя любые из его атрибутов. Вы наверняка знаете о классах и ID. Проверим это в HTML:
<h2 id="first-title" class="magical" rel="friend">David Walsh</h2>

Этот один элемент имеет три аттрибута: ID, class и rel. Для выбора элемента в CSS вы можете использовать селектор ID (#first-title) и селектор class (.magical). Но знаете ли вы, что можно использовать для выбора атрибут rel? Это так называемый селектор атрибута:
h2[rel=friend] {
  /* woohoo! */
}

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

Автоматизация приёмочного тестирования или FitNesse для повышения качества программного продукта

Reading time7 min
Views14K
image
Качество программного продукта не в последнюю очередь зависит от актуальной документации и тщательного тестирования. Хотелось бы осветить вопрос разработки и тестирования ПО вообще и с использованием среды FitNesse в частности.
Читать дальше →

Singleton и Late static binding

Reading time3 min
Views8.2K
Количество Singleton'ов в проекте зачастую прямо пропорционально его сложности и размеру. Естественно, что описывать закрытый конструктор, статическое свойство-объект и метод его получения для сколь-либо ощутимого количества классов немного утомительно, да и пожалуй неверно. Отсюда встаёт вопрос: как «вынести за скобки» реализацию Singleton'а?
Читать дальше →

Паттерн проектирования «Компоновщик» / «Composite»

Reading time5 min
Views44K
Почитать описание других паттернов.

Проблема


Предоставить клиенту единообразный доступ к листовым и составным элементам древовидной структуры.

Описание


Существует большое количество программных систем, в которых так или иначе применяются древовидные структуры объектов. В большинстве случаев, это всевозможные конструкторы/редакторы, которые позволяют собрать что-то большое (составное) из чего-то более мелкого (листового). При этом, клиент трактует и большое и мелкое как одно и тоже, а система должна различать составные и листовые объекты соответственно.
Читать дальше →

Формы в Zend Framework

Reading time6 min
Views13K
Меня часто спрашивают, какой мой любимый компонент в Zend Framework, и я всегда отвечаю: «Forms» (формы).
В парадигме модель-представление-контроллер формы всегда играют непростую роль. Конечно, форма — это всего лишь HTML,
но для меня это нечто более абстрактное.
По сути, форма — это HTML, средствами которого пользователь вводит и получает данные, но кроме этого форма еще выполняет
нормализацию, проверку, фильтрацию данных и вывод сообщений об ошибках, если они есть.
Это может потребовать довольно-таки значительного объема кода.

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

23 короткометражки за два дня: 20-21 февраля в Питере прошел HackDay3

Reading time2 min
Views1.1K
HackDay Первые два мероприятия серии были программистские, на этот раз мы решили отойти в сторону от программного кода и попробовать снять кино. Эксперимент удался. Собрались 140 человек из Москвы, Воронежа и Петербурга.
Читать дальше →

LogParser — привычный взгляд на непривычные вещи

Reading time5 min
Views58K
Когда я в очередной раз использовал LogParser, то чтобы проникнуться и чужим опытом, ввел его название в поиск на Хабре. Как результат — сообщение «Удивительно, но поиск не дал результатов». Вот уж воистину удивительно, когда столь интересный инструмент обойден вниманием. Пришла пора восполнить этот пробел. Итак, встречайте LogParser. Маленькая, но чертовски полезная утилита для любителей SQL.

Из названия инструмента, казалось бы, очень непросто понять, что он делает в разделе SQL. А правда заключается в том, что он такой же LogParser, как и ChartGenerator. В то смысле, что он справляется с обоими задачами с одинаковыми успехом. В целом я бы его охарактеризовал как SQL-процессор гетерогенных данных. Концепция работы в общем такова, что он берет данные из некоторого формата и преобразует их в табличный вид (собственно говоря, только на этом этапе и выполняется иногда парсинг). Затем, посредством выполнения над этими табличными данными некоторого SQL-запроса формирует таблицу с результатом и сохраняет ее опять же в некотором формате. Если коротко, то цепочка выглядит как подготовка входных данных->SQL-процессинг->генерация выходных данных.
Читать дальше →

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity