Как стать автором
Поиск
Написать публикацию
Обновить
0
0
Ринат Янбухтин @R1nat

Пользователь

Отправить сообщение

FF3 справедливо наказывает за размещение блочного элемента внутри строкового

Время на прочтение1 мин
Количество просмотров2.6K
Отлаживаю html-верстку чужого проекта, созданную до появления Firefox 3. В коде часто встречаются ошибочные конструкции вида:
<a href="#">
<div>Hello, bugs!</div>
</a>
CSS я из примера изъял, но и без него подобный код в Firefox 3 даст результат, который вряд ли понравится заказчику. Клик по такой ссылке приводит к появлению двух точек в левом нижнем и левом верхнем углу (это легко проверить на пустом документе):



Иногда такие конструкции ошибочно применяются для создания кнопок из ссылок. Firefox 2 по умолчанию эту ошибку прощает — а Firefox 3 уже нет. Чтобы избежать этой ошибки, не нужно помещать div внутрь тэга a, нужно вместо этого присвоить свойство display:block стилю самого тэга a. Блочные элементы (div) внутри строковых (а) — невалидны.

Update: в этом вопросе и сам Гугл не без греха (спасибо, uratsakidogi)

HabraFx на взлёт

Время на прочтение2 мин
Количество просмотров624
Приветствую, Хабражители!
HabraFx
Пока некоторые на Хабрахабре рассуждают о будущем ресурса, мы пытаемся облегчить, в некотором роде, жизнь хабралюдям. В этих целях мною было создано расширение под названием HabraFx, с помощью которого пользователи браузера Firefox 3 смогут получить некоторые дополнительные возможности по работе с Хабрахабром.

Что это такое?

Почему нужно использовать php-framework’и, на примере codeigniter

Время на прочтение3 мин
Количество просмотров23K
Навеяло вчерашним ночным разговором в асе с одним недопрограммистом. Узнав, что я использую в своих проектах codeigniter, он усомнился в моем профессионализме… И, насколько я понимаю, это не только его мнение, многие не признают framework’и, и скажу вам, что это не от большого ума! Взять например windows-программистов, почему им некто не советует писать на чистом паскале, вместо Delphi, и как так получилось что си-шники используют visual studio? Сегодня я расскажу тебе о пользе php- framework’ов, на примере любимого мною codeigniter’а, выделю основные достоинства такого метода программирования, расскажу о том, насколько легко его изучить, и покажу где почитать подробнее.
Читать дальше →

7 плагинов которые сэкономят ваше время

Время на прочтение2 мин
Количество просмотров645
clock

Человек может управлять многими вещами, так же многие вещи он может вернуть — но человек не способен вернуть свое время.
И так, представляю Вам список плагинов для firefox, которые будут нежно и с любовью вытирать вам слюнки, стирать, готовить ЭКОНОМИТЬ ВАШЕ ВРЕМЯ.
Читать дальше

BareTail & FirePHP

Время на прочтение2 мин
Количество просмотров1.9K
По натуре своей, являясь перфекционистом, стараюсь разложить все по своим (не моим, а именно своим) полочкам. Удается не всегда, но с BareTail и FirePHP определенно повезло – уровень осведомленности при отладке возрос необычайно и это при полном отсутствии всякого вывода напрямую в код страницы.
Читать дальше →

Использование выражений в PHP

Время на прочтение4 мин
Количество просмотров6.9K
В данном тексе я лишь обращаю внимание на некоторые возможности языка PHP. Я не предлагаю их использовать, так как это в некоторых случаях существенно усложняет читабельность кода и приводит к сложностям при отладке. Однако описанные мной подходы в ряде случаев существенно позволяют сократить код.

Выражения — это краеугольный камень PHP. Почти все, что вы пишете в PHP, является выражением. Самое простое и точное определение выражения — «все что угодно, имеющее значение». (с сайта php.net)

UPD: Статья только о том, как МОЖНО делать в некоторых случаях, когда это оправданно. В большинстве случаях (и тем более повсеместно) описанную практику применять не стоит ни в коем случае, так как она сильно усложняет код. Цель статьи — расказать о возможностях языка, не более того.

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

CSS Sprites 2: время Javascript

Время на прочтение11 мин
Количество просмотров4.4K
Ощущение динамики часто являлось тем, что отличало насыщенные Flash-ем сайты от сайтов, основанных на стандартах html. До недавнего времени флэш-интерфейсы всегда казались более живыми, они взаимодействовали с пользователем динамично, и это тот функционал, который остальные сайты не могли просто взять и скопировать.

Конечно, позже состояние дел изменилось — появились эффекты для динамических интерфейсов, поддерживаемые такими JS-библиотеками, как Prototype, Scriptaculous, Moo, YUI, MochiKit (и этот список можно продолжить). Сейчас самое время (через 4 года) вспомнить технику CSS Sprites и посмотреть, сможем ли мы добавить в неё «немного динамики».
Читать дальше →

Осенний сезон ФППП: черный МакБук за самый лучший топик

Время на прочтение2 мин
Количество просмотров898
Здравствуй, дорогой ты наш хабрачеловек!

Рад тебе сообщить, что к нашей Федеральной Программе Поощрения Пользователей (ФППП) присоединяется компания iProLab, готовая подарить тебе ноутбук Apple MacBook Black. Но, само собой, не просто так, а за качественный, всесторонне оригинальный пост на Хабре.



А стать призёром не так уж сложно. Награждён будет автор лучшего топика за каждый осенний месяц 2008 года. 1 октября, 1 ноября и 1 декабря в 18:00 я буду смотреть на страничку и связываться с автором топика, который набрал больше всего голосов других пользователей и соответствует особым правилам ФППП.

А вот и правила:
— награду получает пользователь, чей топик был лучшим по итогам одного из осенних месяцев 2008 года;
— в программе участвуют только обычные топики, топики-переводы и подкасты (т.е. не участвуют топики-ссылки и вопросы. И даже Внутренний Голос не участвует!);
— топик должен быть самостоятельным трудом автора (тексты, картинки, файлы с других сайтов не принимают участия);
— топик должен быть оригинальным, то есть впервые опубликован на Хабре (при этом параллельная публикация в другом месте разрешена, не разрешается только использовать старые тексты из своих блогов);
— топик не должен быть обсуждением Хабра, других проектов «Тематических Медиа» и самой компании, а также компании iProLab;
— каждый участник ФППП может выиграть только один ноутбук, предоставляемый компанией iProLab;
— в программе ФППП не имеют права участвовать сотрудники компаний Тематические Медиа и iProLab, их родственники, родственники их родственников, а также их виртуалы :)
— топик должен стать лидером честно, т.е. никакие обходы правил, накрутки с использованием виртуалов, скрытых и открытых уязвимостей не приветствуются. Я буду следить!

Если топик соответствует всем критериям, его автору стоит ждать письма от администрации. Конечно, призёр может отказаться — и тогда мы передадим его приз автору следующего в рейтинге топика.

Результаты будут публиковаться в этом блоге.

Кстати, мы уже начали ;) Все топики, опубликованные с 01 сентября 2008 года, 18:00, уже участвуют в программе.

Всего тебе хорошего, друг :)

Перечисления в PHP

Время на прочтение2 мин
Количество просмотров18K
Часто ли вам приходилось сожалеть о том, что в PHP нет перечислений как таковых?

Да, кто-то обходился конвенцией именования и получалось нечто вроде:
define( 'COLOR_RED', 'F00' );
define( 'COLOR_GREEN', '0F0' );
define( 'COLOR_BLUE', '00F' );

Или нечто вроде:
// данную переменную ЗАПРЕЩЕНО модифицировать
$colors = array(
    'red' => 'F00',
    'green' => '0F0',
    'blue' => '00F',
);

Но оба подхода имеют существенные недостатки:
  • В первом случае члены перечисления не образуют явной группировки
  • Во втором случае есть риск что переменная будет изменена
  • И в обоих этих случаях мы не можем делать проверку на тип переменной (type hinting)


Под катом предлагаю решение без вышеописанных недостатков…
Читать дальше →

Вся неправда про Суперхабр

Время на прочтение3 мин
Количество просмотров20K


Пользуясь случаем, пока все спят, я расскажу вам всю неправду о суперхабре. Надеюсь, коллеги не будут против, если я внесу немного неясности в вопрос, что же такое суперхабр и зачем он нужен с технической точки зрения?

Итак, для тех кому это интересно, расскажу об составляющих частях этого проекта.

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

Вопросы зала

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

Чтобы как-то упорядочить общение и не раствориться в бесконечности, мы ограничимся десятком-другим первых вопросов, обдуманных и заданных по существу. Это своего рода эксперимент, поэтому обещать всестороннего удовлетворения интересов мы, конечно, не берёмся. Речь пойдёт больше о технической стороне дела, а не о взаимоотношениях с пользователями и урегулированию морально-этических вопросов.

Итак, люди, причастные к созданию проекта habrahabr, готовы ответить на ваши вопросы в комментариях к этой записи.

Внимание! Название блога говорит за себя: предпочтение отдаётся вопросам о технической стороне дела

GenericObject

Время на прочтение12 мин
Количество просмотров834
<?php

/**
* Пример реализации Generic-класса
*
* Возможности:
* 1. Осуществляет доступ к параметрам класса через методы get* set* (accessors/mutators)
*     Пример: $object->setName('Dima'); $object->getName();
*     При изменении стандартного поведения метода (добавление дополнительной логики)
*     можно просто определить его в классе при этом не изменяя интерфейс класса.
* 2. Поддерживает встроенную валидацию данных с возможностью использовать или заранее
*     определенные типы данных (numeric, string, email, date и др.)
*     или регулярные выражения.
* 3. Имплементирует паттерн Lazy initialization для инициализации объектов.
*     Позволяет загружать параметры объекта из БД (например) не сразу при инициализации,
*     а только при первом запросе.
*
* Видимые недостатки:
* 1. Отсутствует возможность использовать автокомплит в IDE, так как методы явно не определены
*
* Плюсы:
* 1. Позволяет избежать дублирования кода при определении однотипных методов set и get
* 2. Сокращает код классов и централизует управление параметрами
* 3. При необходимости можно расширить функциональность. Например, добавив callback функции
*     или принудительную фильтрацию данных.
* 4. Избавляет от рутинных обязанностей проверки входящих данных, тем самым
*     обеспечивая некоторый уровень безопасности.
*     Это совсем не дает 100% гарантии — не стоит забывать об этом.
* 5. Не вносит коррективы в интерфейс классов. Можно легко сочетать обычные классы и классы
*     наследующие GenericObject без видимых различий для клиентов класса. При необходимости
*     можно легко отказаться от использования просто переопределив все гетеры и сетеры.
* 6. Упрощает работу с классами, предоставляя удобный и естественный способ
*     инициализации объектов:
*     $obj1 = new Class(123);
*     $obj2 = new Class(array(
*         'param1' => 'value1',
*         'param2' => 'value2')
*     ));
*/


Далее код реализации и пример использования

Советы для разработчиков CMS и фреймворков на PHP

Время на прочтение2 мин
Количество просмотров2.3K
Уже не раз сталкиваюсь с подобной проблемой, когда люди приходят и просят помочь в решении проблем распределения нагрузки при внезапном возрастании аудитории их сайтов. Ну и самое трудоемкое в данной проблеме — это самописные CMS-подобные системы, которые иногда приходиться переписывать полностью.

Я не буду вдаваться в подробности распределения нагрузки, а отпишу лишь основные правила при соблюдении которых Ваша CMS будет легко масштабироваться.

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

Что PHP может узнать о браузере посетителя?

Время на прочтение3 мин
Количество просмотров31K

О чем это?


Возможно ли узнать более детальную информацию о браузере посетителя кроме строки, содержащейся в $_SERVER[«HTTP_USER_AGENT»]: поддерживает ли яву, апплеты, таблицы стилей и фреймы? А может это вообще гуглобот зашел?
Читать дальше →

Мои плагины для Smarty

Время на прочтение7 мин
Количество просмотров4.2K
Недавно в блоге PHP пролетала статья про наследование шаблонов в Smarty, которая навела меня на мысль: я уже на протяжении нескольких лет использую Smarty в качестве основного шаблонизатора и у меня накопилось множество написанных мною плагинов для расширения базового функционала. Почему бы не поделиться с сообществом своими наработками и послушать других? Я думаю, у многих есть чем поделиться по этой теме…
Читать дальше →

Особенности хранения сессий PHP в memcached

Время на прочтение6 мин
Количество просмотров33K
Данная статья рассматривает одну из проблем хранения PHP-сессий в memcached: отсутствие их блокировки.

Введение

Ни для кого не секрет, что одним из самых популярных способов повышения производительности сайта является использование memcached. Об этом неоднократно говорили и приводили многочисленные примеры. Самый простой способ сделать это — использовать memcached для хранения сессий PHP. Для этого нет необходимости переписывать весь код, достаточно нескольких простых действий. Я не буду рассказывать, почему надо хранить сессии в memcached. Я расскажу о том, почему хранение сессий в memcached опасно.
Читать дальше →

jQuery для начинающих

Время на прочтение9 мин
Количество просмотров515K
jQuery Logo

jQuery — это замечательный JavaScript Framework, который подкупает своей простотой в понимании и удобством в использовании. Но изучение надо с чего-то начинать, и лично моё мнение — лучше всего начинать с наглядных примеров, и они далее…

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

jQuery для JavaScript-программистов

Время на прочтение12 мин
Количество просмотров71K
Примечание: ниже расположен перевод статьи «jQuery for JavaScript programmers», в которой автор высказывает свое мнение об этой библиотеке, ориентируясь, в первую очередь, на продвинутых программистов, и приводит несколько десятков примеров ее использования.

Когда jQuery увидела свет в январе 2006, я подумал: «очередная красивая игрушка». Выбор CSS-селекторов в качестве базиса было, конечно, изящной идеей (подробнее о ней в моей заметке getElementsBySelector), но использование цепочек преобразований выглядело немного замысловато, и сама библиотека, по-видимому, не покрывала всех возможных случаев. Я расценивал тогда jQuery только как временное и проходящее решение.

Только несколько месяцев спустя понял я, насколько же ошибался по отношению к ней. jQuery является просто произведением инженерного искусства. Она умело покрывает достаточно широкой диапазон повседневных функций и предоставляет при этом удобный API для расширений, с помощью которых можно добавить любую другую функциональность. Абстрактность в ней заложена на уровне ядра — речь идет о выборе DOM-элементов — и она извлекает из него максимум пользы. И что важнее всего, использование этой библиотеки подразумевает следование хорошему стилю в программировании и хорошо сочетается с другими частями JavaScript-кода.

Большинство современных обзоров jQuery делают упор на дизайнеров и неопытных разработчиков. Я попытаюсь объяснить, почему она также нужна и опытным программистам.

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

Скрытые фичи суперхабра

Время на прочтение2 мин
Количество просмотров549
Сегодня чего-то залез в код хабра и обнаружил там закомментированный блок, который по сути представляет из себя панельку с кнопочками для навигации по сообщениям. Выглядит закомментированный код так:
<ul class="comments_bar">
    <li class="cb_reload"><span class="corner"></span><a href="#" onclick="return commentForm.reloadComments('38271', 'post', '1219860285');" title="Обновить комментарии без перезагрузки страницы"></a></li>
    <li class="cb_prev"><a href="#" onclick="return commentForm.goPrevNewComment(event);" title="Следующий новый"></a></li>
    <li class="cb_next"><a href="#" onclick="return commentForm.goNextNewComment(event);" title="Предыдущий новый"></a></li>
    <li class="cb_my"><span class="corner"></span><a href="#" onclick="return commentForm.goMyComment(event);" title="Перейти к своему комментарию"></a></li>
</ul>

Как видно, этот блок предоставляет следующий функционал:
  1. Перезагрузку дерева сообщений, без перезагрузки страницы
  2. Переход к следующему или предыдущему непрочитанному сообщению (при этом снимается отметка о том, что сообщение не прочитанно)
  3. Переход к своим сообщениям
Что самое интересное, оно уже работает, нужно только включить. Включить можно, например, введя в адресной строке следующее:
javascript:mc=document.getElementById('main-content'); mc.innerHTML+=mc.childNodes[5].data;void 0;

Интересно, что скажут хабраразработчики? ;)

UPD: Подоспел greasemonkey-скрипт от rozboris

UPD2: Ещё один скрипт, пока что работает только в Опере. Автор —GMM

Использование связки из PHP и MySQL совместно с Google Maps

Время на прочтение13 мин
Количество просмотров17K

Отсебятина


А вот и перевод третьего урока по Google Maps API. Этот урок — как видно из названия — посвящен созданию карт при помощи данных, хранящихся в БД. Как и предыдущие — кросс-пост из моего блога.

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

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность