Как стать автором
Обновить
0
0
padm @padm

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

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

Eclipse PDT — Zend for Eclipse своими руками

Время на прочтение2 мин
Количество просмотров7.6K
С выхода в свет последней версии Zend прошло уже немало времени, а на Хабре регулярно проскакивали дискуссии о том, что же лучше — Zend for Eclipse или Eclipse PDT, в которых я неизменно принимал участие. Нынче я позволю себе потревожить публику своим взглядом на предмет, расскажу про всяческие плагины и вы сами сможете решить, что вам нужнее.
Читать дальше →
Всего голосов 51: ↑50 и ↓1+49
Комментарии56

Поиграем в CacheGraph?

Время на прочтение3 мин
Количество просмотров689
imageПредположим у Вас есть сайт. Предположим вы его оптимизировали по самое «немогу», но всеравно хочеться больше.
Лично мне хотелось, но долгое время не получалось.
Когда я победил тормознутость базы кэшированием запросов, тормознутость блоков — кэшированием блоков, а целые страницы кэшировать я не мог…
Cайт конечно стал работать много быстрее, но начал тормозить уже… мемкэшед?
Читать дальше →
Всего голосов 69: ↑61 и ↓8+53
Комментарии24

Оригинальный способ хранения изображений флагов

Время на прочтение1 мин
Количество просмотров3.6K
Поставил сегодня я новую бета версию Skype и заодно решил посмотреть старым добрым Restorator'ом какие ресурсы (картинки в частности) содержит 25 мегабайтный файл. И наткнулся на очень интересный способ хранения флагов стран:


Upd: Рисунок оригинальный, ничего не менял, только прозрачные области белым цветом залил.
Всего голосов 197: ↑191 и ↓6+185
Комментарии197

Иерархические структуры данных и производительность

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

Введение



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

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

Читать дальше →
Всего голосов 123: ↑120 и ↓3+117
Комментарии27

Плавающая контентная область сайта.

Время на прочтение5 мин
Количество просмотров2.2K
Приветствую Хабр.
По мотивам cайта, сделанного сами знаете кем :)
В свое время увидел, такой эффект – слева сайта находятся ссылки, при клике на которые контентная область сайта плавно перемещается к указанному идентификатору. Эффект запомнился — решил повторить.
Для реализации плавного перемещения взял JQuery.

Читать дальше →
Всего голосов 125: ↑108 и ↓17+91
Комментарии78

Архитектура SignalSlot для РНР веб-приложений на примере ezComponents

Время на прочтение4 мин
Количество просмотров685
logo1На днях, читая рассылку по Zend Frameworks я заметил тему одного разработчика о реализации системы плагинов без модификации некоторого стандартного ядра. Подобную задачу приходится решать достаточно часто и во многих случаях — например, вряд ли хоть какая-то CMS-система обходится без механизма плагинов. Конечно же, разработчики таких популярных CMS систем, как Drupal или Wordpress уже решили для себя эту задачу, разработав собственную архитектуру подключения плагинов на лету без затрагивания функционала ядра. Однако аналогичная задача, мне кажется, все же из категории «вечных» и не все решения могут быть применены в каждом конкретном случае.

С аналогичными проблемами сталкиваются не только веб-разработчики, она актуальна и при проектировании компонентных десктопных приложений и сложных систем. И некоторые успешные решения вполне можно подсмотреть и позаимствовать с таких разработок. В данном случае я говорю об архитектуре Signal/Slot, которая реализована в библиотеке Qt (подробное описание) и применяется там для коммуникации между компонентами. Аналогичный функционал очень был бы полезен и в веб-разработках, в данном случае — в РНР проектах.
Читать дальше →
Всего голосов 33: ↑27 и ↓6+21
Комментарии15

Иерархические структуры данных и Doctrine

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

Введение



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

В первую очередь, это связано с тем, что реляционные базы не приспособлены к хранению иерархических структур (как, например, XML-файлы), структура реляционных таблиц представляет из себя простые списки. Иерархические же данные имеют связь «родитель-наследники», которая не реализована в реляционной структуре.

Тем не менее, задача «хранить деревья в базе данных» рано или поздно возникает перед любым разработчиком.

Ниже мы подробно рассмотрим, какие существуют подходы в организации хранения деревьев в реляционных БД, а также рассмотрим инструментарий, который нам предоставляет ORM Doctrine для работы с такими структурами.
Читать дальше →
Всего голосов 64: ↑63 и ↓1+62
Комментарии41

Блокировки в MySQL

Время на прочтение4 мин
Количество просмотров109K
На хабре часто обсуждаются принципы работы MySQL. Данный хабратопик посвящен механизмам блокировок, используемым в MySQL. Топик поможет начинающим изучать MySQL и, в некоторой степени, опытным хабралюдям.

Механизм блокирования в MySQL


Одновременный доступ нескольких клиентов к хранилищу данных может приводить к ошибкам различного типа. Например, одновременное чтение одним клиентом и запись другим клиентом одной и той же строки таблицы с большой вероятностью приведет к сбою или чтению некорректных данных. Механизмы блокировок позволяют избежать ситуаций одновременного доступа к данным, регламентируя механизм взаимодействия пользователей между собой.
Читать дальше →
Всего голосов 65: ↑62 и ↓3+59
Комментарии18

Происхождение названий некоторых команд Unix

Время на прочтение5 мин
Количество просмотров8.1K
Знание истории происхождения вещей и их названий, будь то простой карандаш, автомобиль или команда операционной системы, делает их повседневное использование намного интереснее. В этой заметке я постарался разобраться в причинах странного, казалось бы, наименования некоторых программ, используемых в операционной системе Unix и её родственниках: *BSD, Solaris, HP-UX, Linux и т.д.

Перепечатка моей статьи, написанной, в свою очередь, по мотивам страницы What does {some strange unix command name} stand for?

Читать дальше →
Всего голосов 112: ↑107 и ↓5+102
Комментарии37

Мирный XSS

Время на прочтение3 мин
Количество просмотров9K
Эта статья о мирном атомеXSS. Заставим зло работать на добро!

А зачем?


Простейший пример всё объяснит:
Вы разрабатываете веб-сервис, который поставляет данные другим сайтам (погода, данные по торгам в реальном времени, чат и т.п). Вам нужно организовать кроссайтовую передачу данных(данные погоды, торгов, текст чата) на стороне клиента.

Методы организации XSS

  1. Через тэг iframe
  2. Через тэг script
  3. Через flash<->javascript
  4. Через window.name + iframe + form
  5. Через CSS хак
  6. Через canvas + img
  7. Через прокси
Реализация каждого метода
Всего голосов 98: ↑87 и ↓11+76
Комментарии23

CDN своими руками или раздача видеоконтента

Время на прочтение5 мин
Количество просмотров11K
[ Часть I. Доставка видеоконтента ] [ Часть II. CDN своими руками ]

В продолжение темы про доставку видеоконтента: мы обеспечили хранение и обработку контента, как теперь отдать контент таким образом, чтобы он оказался как можно “ближе” к потребителю? Большая часть статьи будет посвящена обобщенному подходу географически распределенной раздачи контента, а в конце в качестве примера описанный подход будет применен к доставке видеофайлов и вещаний конечным пользователям.

Кроме самого факта, что контент был доставлен пользователю, мы должны обеспечить качество доставки контента. Для FLV-файла видео это означает, что скорость, с которой он доставляется пользователю, должна быть выше либо равна битрейта потока, иначе видео у пользователя при просмотре будет «затыкаться».

Кроме того, имеет смысл «приблизить» контент к пользователю географически. Это связано с пропускной способностью каналов (отсутствием иногда хороших магистральных каналов), а также с разницей в стоимости локального и внешнего трафика для конечного пользователя (например, в регионах РФ).

Такой шаг необходимо сделать при желании выйти на международный рынок, а также при региональном развитии внутри РФ. Сегодня в регионах очень часто самыми популярными сайтами являются региональные порталы, которые предоставляют различные сервисы, в том числе и сервис видеохостинга, а их популярность обусловлена как стоимостью трафика, так и скоростью доступа/временем отклика. Можно представить, что пользователь готов подождать открытия страницы, загрузки плеера, но тяжело предположить, что пользователь согласится смотреть видео, которые прерывается из-за постоянной буферизации, или смотреть вещание, которое доходит до пользователя в виде слайдшоу (после пропуска пакетов остались только опорные кадры видео).

Таким образом, осознав необходимость географической распределенности для контента, мы покупаем/арендуем сервера в непосредственной близости от потребителя: в Европе, США, Украине, Екатеринбурге и т.д.

Что же делать дальше?
Всего голосов 34: ↑33 и ↓1+32
Комментарии39

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

Время на прочтение7 мин
Количество просмотров11K
[ Часть I. Доставка видеоконтента ] [ Часть II. CDN своими руками ]

Что такое «контент» для видеохостинга? Во-первых, контент видеохостинга – это просто видео, которое представляет собой набор файлов в различных форматах, в частности, в формате FLV для просмотра пользователем через Flash Player. Эти файлы статичны, видеохостинг при загрузке пользователем видеоролика осуществляет конвертацию во все требуемые форматы с необходимым битрейтом. Хранение такого контента — это хранение обычных файлов, только довольно большого размера. Отдача контента — это, по сути, организация скачивания файлов.
Во-вторых, контент видеохостинга — это «живые» потоки или вещания. Вещания не записываются на диск, не происходит их конвертация, потоки раздаются клиентам с учетом пропускной способности каналов (происходит пропуск пакетов, если канал клиента недостаточен для получения потока вещания в полном качестве). Отдача контента в данной ситуации — это раздача потока на большое количество подключенных пользователей (тысячи смотрящих).
Читать дальше →
Всего голосов 44: ↑44 и ↓0+44
Комментарии79

Верстка скругленных границ и острых углов

Время на прочтение4 мин
Количество просмотров21K
Сложность элементов интерфейса увеличивается с каждым новым макетом, что доставляет немало хлопот верстальщикам. Развивающиеся технологии позволяют создавать в WEBе сложные приложения (Google не даст мне соврать), поэтому дизайнеры себя не сдерживают и рисуют всё более навороченные вещи. Как правило, это приводит к большому количеству графики на страницах.

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

Читать дальше →
Всего голосов 190: ↑183 и ↓7+176
Комментарии96

RESTful PHP — 5 простых советов

Время на прочтение4 мин
Количество просмотров83K
REST (Representational state transfer) — это архитектурный стиль или свод соглашений для web-приложений и сервисов, основанный на манипулировании ресурсами и спецификацией HTTP. Впервые об этом заговорил Рой Филдинг (Roy Fielding) — один из отцов основателей HTTP (Hypertext Transfer Protocol).

Web-приложения зачастую игнорируют спецификацию HTTP и двигаются вперёд используя полюбившиеся возможности: GET и POST, 200 OK и 404 NOT FOUND. Так как используются программируемые web-приложения, со своими собственными API, то решение игнорировать спецификацию HTTP, может создать проблемы в дальнейшем. Как следствие — имеем множество приложений с интерфейсами GET и POST. Например интерфейс удаления пользователя: GET /user/1/delete против POST /user/delete {id=1}; в случае REST можно указать /user/1 это ресурс, а удаление HTTP метод DELETE.
Читать дальше →
Всего голосов 72: ↑62 и ↓10+52
Комментарии122

Разметка. Transitional vs Strict

Время на прочтение4 мин
Количество просмотров7.2K
Речь в статье пойдет о такой, казалось бы изжеваной и изъезженой теме, как валидация веб-документа по одной из DTD-схем, которые в свою очередь определяются с помощью DOCTYPE.

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

В последнее время, многие редакторы и CMS'ки автоматически проставляют DOCTYPE для документа, что само по себе является прорывом, но к сожалению этого недостаточно, так как зачастую это именно Transitional схема. Начинающие разработчики не уделяют этому должного внимания, а зачастую вобще не подозревают что у них есть выбор.
Читать дальше →
Всего голосов 150: ↑142 и ↓8+134
Комментарии119

Хранение файлов в MySQL и их быстрая раздача

Время на прочтение3 мин
Количество просмотров97K
Думаю у многих возникала необходимость хранить файлы, связанные с записью в таблице. Это может быть картинка к новости, аватар, загруженный пользователем файл — да все, что угодно. Обычно в этому случае поступают просто — файл ложится в файловую систему, а ссылка на него — в запись БД.
Но у такого классического похода множество недостатков:
  • файлы не удаляются при удалении соответствующей записи БД
  • проблемы при одновременной попытке обновления файла
  • нарушение синхронизации между БД и файловой системой при откате транзакции
  • при резервном копировании и восстановлении информации в БД может возникнуть рассинхронизация с файловой системой
  • файлы не подчиняются ограничениям доступа, наложенным с помощью БД

Больше о проблемах, возникающих при хранении файлов отдельно от БД можно почитать в презентации SQL Antipatterns, раздел Phantom Files, страница 60. Кстати, автор презентации предлагает решение — хранить файлы прямо в БД, в поле типа BLOB. Правда следует замечание, что это должно быть взвешенное решение в каждом конкретном случае. Ведь при таком способе хранения файлов вебсервер должен при каждом запросе вызывать некий скрипт, который будет извлекать файл из БД и отдавать пользователю, что неминуемо отрицательно скажется на производительности.
Для поиска решения данной проблемы был проведен мозговой штурм и придумано несколько вариантов решения проблемы:
Читать дальше →
Всего голосов 71: ↑59 и ↓12+47
Комментарии99

Основы портлетов

Время на прочтение24 мин
Количество просмотров31K
Привет хабралюди! Сегодня я хочу рассказать об одной интересной технологии, с которой познакомился совсем недавно — это технология портлетов. Хотя на хабре уже есть пара упоминаний о портлетах, но там ничего внятного я не нашел. Поэтому решил написать свою статью, где хочу показать на практике как программировать портлеты. При этом попутно вставляя какие-то теоретические сведения. А принимая во внимание, то, что документации на русском крайне мало, то рассказать об этом хочется вдвойне :)
Читать дальше →
Всего голосов 35: ↑32 и ↓3+29
Комментарии70

Атака на WPA: подробности

Время на прочтение10 мин
Количество просмотров39K
По мотивам топика о взломанном WPA.
Попытаемся все же разобраться, что случилось и чем это может нам грозить. Поскольку криптографические атаки — вещь, требующая для понимания весьма много специфических знаний, статью можно считать в некотором роде ознакомительной с безопасностью в Wi-Fi сетях.
Читать дальше →
Всего голосов 77: ↑73 и ↓4+69
Комментарии30

Файловые системы в Linux

Время на прочтение4 мин
Количество просмотров122K
XFS — начало разработки 1993 год, фирма Silicon Graphics, в мае 2000 года предстала в GNU GPL, для пользователей большинства Linux систем стала доступна в 2001-2002 гг. Отличительная черта системы — прекрасная поддержка больших файлов и файловых томов, 8 эксбибайт — 1 байт (8*260-1 байт) для 64-х битных систем. Ко всему прочему обладает другими немаловажными особенностями — непрерывные области дискового пространства, задержка выделения пространства и онлайн дефрагментация. Является одной из старейших журналируемых файловых систем для *nix, и содержит в себе наиболее отлаженный, в этом контексте, исходный код.

ReiserFS (Reiser3) — одна из первых журналируемых файловых систем под Linux, разработана Namesys. Имеет некоторые врождённые головные боли, но в целом неплохая система, ведущая отсчёт дней своих с 2001 года. Оговорюсь, что смысл журналируемых систем заключается в дисковых транзакциях, которые последовательно пишутся в специальную зону диска (журнал, он же лог), перед тем как данные попадают в конечные точки файловой системы. Максимальный объём тома для этой системы равен 16 тебибайт (16*240 байт).
Читать дальше →
Всего голосов 93: ↑84 и ↓9+75
Комментарии100

Узнаем оператора и регион мобильного телефона

Время на прочтение4 мин
Количество просмотров16K
image
Как то гуляя в интернете наткнулся на интересную ссылку — Коды мобильных операторов. И очень мне захотелось иметь такую базу локально.
Под катом дамп mysql базы, php код для её использования и скрипт парсер для обновления.
Читать дальше →
Всего голосов 82: ↑68 и ↓14+54
Комментарии57

Информация

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